消息中间件(二)——kafka

文章目录

    • Apache Kafka综述
      • 什么是消息系统?
        • 点对点消息类型
        • 发布-订阅消息类型
      • 什么是Kafka?
        • 优点
        • 关键术语
        • Kafka基本原理
        • 用例

Apache Kafka综述

在大数据中,会使用到大量的数据。面对这些海量的数据,我们一是需要做到能够收集这些数据,其次是要能够分析和处理这些海量数据。在此过程中,需要一套消息系统。

Kafka专门为分布式高吞吐量系统设计。作为一个消息代理的替代品,Kafka往往做的比其他消息中间件做的更好。

与其他消息队列产品相比,它主要有以下优点:

  • 吞吐量高
  • 内置分区
  • 复制能力
  • 固有的容错能力

因此,Kafka非常适合大规模的消息处理应用

什么是消息系统?

消息系统负责将数据从一个应用传递到另一个应用,应用就可以专注于数据,而不用担心数据如何共享。分布式消息传递基于可靠消息队列的概念。消息在客户端应用程序和消息传递系统之间异步排队。
有两种类型的消息模式可用:

  • 点对点模式
  • 订阅-发布模式(pub-sub),也是最常用的一种消息模式
点对点消息类型

在点对点的消息传递类型中,所有的消息都保留在消息队列中。一个或多个消费者可以消耗队列中的消息,但特定的消息只能有最多一个消费者消费。一旦消费者消费了队列中的消息,该消息将会在消息队列中消失。
点对点消息系统最典型的例子是订单处理系统,其中每个订单将有由订单处理器处理,但多个订单处理器也可以同时工作。
在这里插入图片描述

发布-订阅消息类型

在发布-订阅系统中,消息被保留在各个主题中。
与点对点系统不同的是,一个订阅者可以订阅一个或多个不同主题中的消息并使用这些主题中的所有消息。
在发布-订阅系统中,消息的生产者称为发布者,消息的使用者称为订阅者。
一个现实的例子是dish天线电视,它发布不同的渠道和主题,如运动、音乐、电影等,任何人都可以订阅自己需要的主题集,并接收到订阅主题的消息。
在这里插入图片描述

什么是Kafka?

Kafka is a distributed,partitioned,replicated commit logservice.

  1. Apache Kafka 是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使你能够将消息从一个端点传递到另一个端点。
  2. Kafka 适合离线和在线消息消费
  3. Kafka 消息保留在磁盘上,并在群集内复制以防止数据丢失。
  4. Kafka 构建在 ZooKeeper 同步服务之上。 它与 Apache Storm 和 Spark 非常好地集成,用于实时流式数据分析。
优点
  • 可靠性
    Kafka是分布式、分区复制、可容错的
  • 可扩展性
    消息传递系统可以轻松扩缩容,不用关机
  • 耐用性
    Kafka使用“分布式提交日志”,这意味着消息会尽可能快地保留在磁盘上,因此它是持久的。
  • 高性能
    Kafka无论是发布还是订阅消息的吞吐量都是很高的。即使存储了很多TB的消息,还是能够保证高性能。

Kafka非常快,并且能保证零停机和零数据丢失

关键术语
  1. 生产者和消费者:Productor & Customer
    在Kafka中,消息的发布者称为生产者Productor,消息的接受和使用者称为消费者Customer
  2. broker:
    Kafka消息队列集群中有很多台server,每一台server都可以存储消息,这每一台server都可以称做是Kafka的一个实例,也称为broker
  3. 主题:topic
    一个topic中会保存同一类的消息,相当于对消息进行分类。productor在向Custom发送消息的时候,需要指定topic,也就是制定了该消息属于哪一分类。
  4. 分区:partition
    每个topic都划分为多个partition,每个partition在存储层面都是一个append log文件。任何写进某partition的消息都会被追加在一个log文件的尾部。
    分区的意义:Kafka基于文件进行存储,当文件内容过大的时候,很容易达到单个磁盘的上限。使用分区进行存储,一个分区存储一个文件,保证单个文件不会过大的情况下,还能将数据存在不同的broker = Kafka server上,从而实现了负载均衡,能够承载更多的消费者
  5. 偏移量:offset
    一个分区存储一个文件,而消息在文件中的位置就称为是偏移量offset,offset的字符类型为long长字符类型,它可以唯一标记一条消息。由于Kafka并没有提供额外的消息索引机制,因此文件只能顺序读写,所以Kafka基本不允许对消息进行“随机读写”。

小结Kafka:

  • 是基于发布-订阅分布式消息队列
  • 面向大数据,消息存储在topic中,而每个topic会分为多个patition分区;
  • 消息存储在磁盘中,每个partition分区对应一个磁盘上的一个文件来存储消息,消息的写入就是在log文件后追加内容,文件可以在集群内复制防止丢失;
  • 即使消息被消费,消息也不会立刻消失,可以通过配置以实现自动删除来释放空间
  • Kafka依赖分布式协调服务zookeeper,适合离线/在线消息的消费,与storm/spark等实时流式数据处理工具常常结合使用。
Kafka基本原理
  1. 分布式和分区:distributed、partitioned
    Kafka是一个分布式的发布-订阅消息队列,主要体现在哪些方面?
    体现在大量的数据被保存在磁盘上,但单个磁盘的容量是有限的,于是消息被生产者生产的时候分为不同的topic主题来保存,每个topic又被分为多个partition分区,而每个partition分区对应一个文件,以文件的方式来保存消息数据,每个文件又可以被保存在不同的broker上,这样就实现了Kafka集群来分布式存储消息队列。
    另外,每个partition都有一定的副本,可以备份到不同的borker上,从而提高可用性。
    总的来说就是,一个topic对应的多个partition上的文件分散保存在集群的多个不同broker上,存储的方式是一个partition对应一个文件,每个broker负责存储在自己机器上的每个文件的读写。

  2. 副本:replicated
    Kafka可以通过配置指定partition的备份个数(replicas),每个partition将会被备份到多台机器上,提高了可用性,备份数量通过配置文件可以指定。
    实质上,冗余备份在分布式系统中很常见。
    有副本的存在,就会涉及到同一个文件的多个副本如何管理和调度
    Kafka设置了“leader机制”,每个partition选举一个broker作为leader,用来负责对该分区的读写,其余broker则作为follower,只需简单地和leader同步即可。如果原来的leader失效,partition则会选举新的broker成为leader。
    至于如何选取 leader,实际上如果我们了解 ZooKeeper,就会发现其实这正是 Zookeeper 所擅长的,Kafka 使用 ZK 在 Broker 中选出一个 Controller,用于 Partition 分配和 Leader 选举。
    实际上,作为leader的server,承担了整个分区的所有读写请求,负担是比较大的。从整体考虑,有多少个partition就有多少个leader,Kafka将leader分摊到不同的broker上,也算是整体上的一种负载均衡。

  3. Kafka数据流处理
    在这里插入图片描述
    (1)数据产生方式:produce

生产者写入消息数据可以指定4个参数,分别为topic,partition,key,value。其中topic和value(要写入的数据)必须指定,而key和partition是可选的。
对于一条记录,要先对其进行序列化,再按照topic和partition,发送到对应的队列中去。如果没有指定partition,有两种情况:

  • 指定key,按照key进行哈希,同一个key的消息进一个partition

  • 未指定key, round-robin进行partition的选择
    producer将会和topic下的每个partiton leader保持socket连接,消息由producer直接发送给broker。
    其中partition leader的身份在zookeeper中已经注册,producer作为zookeeper client,已经注册了watch用来监听partition leader的变更事件,因此可以准确知道leader是谁。
    producer端采用异步发送,先将一部分的消息存在客户端的buffer里,并将其分批发送给broker,小数据io很多会增加整体网络的延迟,批量延迟发送实际上是提供了网络效率。
    (2)数据消费过程:custome

  • 对于消费者,不是以单独形式存在的,每个消费者都属于一个消费群租customer group,一个group包含多个consumer。需要注意的是,消费者的订阅topic行为都是以customer group的形式来订阅的,发送到topic的消息,只会被订阅该topic的每个group中的每个customer消费。

  • 如果说所有的customer都有共同的group,那么就像是一个点对点的消息系统;如果每个消费者都属于不同的group,那么消息会广播给所有的消费者。

  • 实际上消息是根据partition来分的,一个partition只能被消费组里的一个消费者消费,但是可以多个不同的消费组消费,消费组里的每个消费者是关联到一个partition的;因此有一个说法:对同一个topic,同一个group中不能有多于partitions个数的customer同时消费,否则某些customer将无法得到消息。

  • 同一个消费组的两个customer不能同时消费一个partition

  • partition 中的消息只有一个 consumer 在消费,且不存在消息状态的控制,也没有复杂的消息确认机制,可见katka broker 端是相当轻量级的。当消息被 consumer 接收之后,需要保存 Offset 记录消费到哪,以前保存在ZK中,由于 ZK 的写性能不好,以前的解决方法都是Consumer 每隔一分钟上报一次,在0.10 版本后,Kafka 把这个Offset 的保存,从ZK 中剥离,保存在一个名叫 consumeroffsets topic 的Topic 中,由此可见consumer 客户端也很轻量级

用例

Kafka可以在很多场景中使用,以下列出一些用例:

  • 指标
    Kafka通常用于操作监控数据。这涉及到聚合来自分布式应用程序的统计信息,以产生操作数据的集中馈送。
  • 日志聚合解决方案
    可用于跨组织收集多个服务的日志,且以标准格式提供给多个服务器。
  • 流处理
    流行的框架(如Storm和Spark Streaming)从主题中读取数据,对其进行处理,并将处理后的数据写入新主题,供用户和应用程序使用。 Kafka的强耐久性在流处理的上下文中也非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147912.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Java 进阶篇】JDBC查询操作详解

在数据库编程中,查询是一项非常常见且重要的操作。JDBC(Java Database Connectivity)提供了丰富的API来执行各种类型的查询操作。本篇博客将详细介绍如何使用JDBC进行查询操作,包括连接数据库、创建查询语句、执行查询、处理结果集…

软件工程与计算总结(二)软件工程的发展

本章开始介绍第二节内容,主要是一些历史性的东西~ 一.软件工程的发展脉络 1.基础环境因素的变化及其对软件工程的推动 抽象软件实体和虚拟计算机都是软件工程的基础环境因素,它们能从根本上影响软件工程的生产能力,而且是软件工程无法反向…

231003-四步MacOS-iPadOS设置无线竖屏随航SideCar

Step 0:MacOS到iPad无线竖屏随航显示,最终效果 Step 1: 下载 Better Display Step 2:在设置中新建虚拟屏幕,创建虚拟屏幕 Step 3:进行如下设置 Step 4:注意事项 ⚠️ 设置后的虚拟屏幕与Sideca…

如何在 Google Earth 中创建轨迹、路线并制作动画

如何创建航迹 https://kurviger.de/en Google 地球飞行教程(天桥动画) 选择合适的点 (可调整视图快照)点击录制,依次点击图标即可

堆栈与堆(Stack vs Heap)有什么区别?

​编写有效的代码需要了解堆栈和堆内存,这使其成为学习编程的重要组成部分。不仅如此,新程序员或职场老手都应该完全熟悉堆栈内存和堆内存之间的区别,以便编写有效且优化的代码。 这篇博文将对这两种内存分配技术进行全面的比较。通过本文的…

selenium使用已经获取的cookies登录网站报错unable to set cookie的处理方式

用selenium半手动登录github获取其登录cookies后,保存到一个文件gtb_cookies.txt中。 然后用selenium使用这个cookies文件,免登录上github。但是报错如下:selenium.common.exceptions.UnableToSetCookieException: Message: unable to set co…

简化数据库操作:探索 Gorm 的约定优于配置原则

文章目录 使用 ID 作为主键数据库表名TableName临时指定表名列名时间戳自动填充CreatedAtUpdatedAt时间戳类型Gorm 采用约定优于配置的原则,提供了一些默认的命名规则和行为,简化开发者的操作。 使用 ID 作为主键 默认情况下,GORM 会使用 ID 作为表的主键: type User st…

喜讯 | 怿星科技获评SAE“优秀核心零部件企业”,测试软件平台工具广受赞誉

2023年9月22日-23日,SAE 2023汽车智能与网联技术国际学术会议成功举行。此次学术会议由SAE International与南昌智能新能源汽车研究院联合主办,大会汇聚了来自国内外智能网联领域的顶尖专家和学者。大会同期颁布的奖项旨在向行业推选出更多新时代涌现的杰…

OpenGLES:绘制一个混色旋转的3D圆锥

一.概述 1.1 对圆锥的拆解 上一篇博文讲解了绘制圆柱体,这一篇讲解绘制一个彩色旋转的圆锥 在绘制圆柱体时提到过,关键点是先将圆柱进行拆解,便于创建出顶点坐标数组 同样,绘制圆锥也先进行拆解 圆锥的拆解很简单&#xff0c…

最短路径专题3 最短距离-多边权

题目: 样例: 输入 4 5 0 2 0 1 2 1 0 2 5 1 0 3 1 2 1 2 1 6 3 2 2 3 输出 3 5 思路: 根据题目意思,其实还是Dijkstra 的题目,不同的是,多了一个最少花费边权的这个点,多添加一个spend数组&am…

C/C++学习 -- 分组密算法(3DES算法)

1. 3DES算法概述 3DES(Triple Data Encryption Standard),又称为TDEA(Triple Data Encryption Algorithm),是一种对称加密算法,是DES(Data Encryption Standard)的加强版…

软件测试教程 自动化测试selenium篇(二)

掌握Selenium常用的API的使用 一、webdriver API public class Main {public static void main(String[] args) {ChromeOptions options=new ChromeOptions();//参数表示允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver=new Chr…

【Kafka专题】Kafka快速实战以及基本原理详解

目录 前言课程内容一、Kafka介绍1.1 MQ的作用1.2 为什么用Kafka 二、Kafka快速上手2.1 实验环境2.2 单机服务体验2.3 认识Kafka模型架构2.4 Kafka集群2.5 理解服务端的Topic、Partion和Broker2.6 章节总结:Kafka集群的整体结构 三、Kraft集群(拓展&#…

openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT

文章目录 openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT88.1 前置条件检查88.2 转换88.3 转换示例 openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT …

【数据结构】排序(2)—冒泡排序 快速排序

目录 一. 冒泡排序 基本思想 代码实现 时间和空间复杂度 稳定性 二. 快速排序 基本思想 代码实现 hoare法 挖坑法 前后指针法 时间和空间复杂度 稳定性 一. 冒泡排序 基本思想 冒泡排序是一种交换排序。两两比较数组元素,如果是逆序(即排列顺序与排序后…

HTML详细基础(二)文件路径

目录 一.相对路径 二.绝对路径 三.超链接标签 四.锚点链接 首先,扩展一些HTML执行的原理: htmL(hypertext markup Language) 是一种规范(或者说是一种标准),它通过标记符(tag)来标记要显示…

求各区域热门商品Top3 - HiveSQL

背景:这是尚硅谷SparkSQL练习题,本文用HiveSQL进行了实现。 数据集:用户点击表,商品表,城市表 题目: ① 求每个地区点击量前三的商品; ② 在①的基础上,求出每个地区点击量前三的商品后&a…

【管理运筹学】第 8 章 | 动态规划(5,设备更新问题)

系列文章 【管理运筹学】第 8 章 | 动态规划(1,多阶段决策过程与动态规划基本概念) 【管理运筹学】第 8 章 | 动态规划(2,动态规划的基本思想与模型求解) 【管理运筹学】第 8 章 | 动态规划(3&…

MySQL进阶 —— 超详细操作演示!!!(下)

MySQL进阶 —— 超详细操作演示!!!(下) 五、锁5.1 概述5.2 全局锁5.3 表级锁5.4 行级锁 六、InnoDB 引擎6.1 逻辑存储结构6.2 架构6.3 事务原理6.4 MVCC 七、MySQL 管理7.1 系统数据库7.2 常用工具 MySQL— 基础语法大…

基于蜉蝣优化的BP神经网络(分类应用) - 附代码

基于蜉蝣优化的BP神经网络(分类应用) - 附代码 文章目录 基于蜉蝣优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蜉蝣优化BP神经网络3.1 BP神经网络参数设置3.2 蜉蝣算法应用 4.测试结果:5.M…