Kafka知识点汇总

总体结构

Producer

producer根据用户指定的算法,将消息发送到指定的partition

Part

  1. kafka以topic来进行消息管理,每个topic包含多个part(ition),每个part对应一个逻辑log,有多个segment组成。
  2. 每个segment中存储多条消息(见下图),消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。
  3. 每个part在内存中对应一个index,记录每个segment中的第一条消息偏移。
  4. 发布者发到某个topic的消息会被均匀的分布到多个part上(随机或根据用户指定的回调函数进行分布),broker收到发布消息往对应part的最后一个segment上添加该消息,
  5. 当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,
  6. segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。

Broke

  1. 消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能
  2. 直接使用linux 文件系统的cache,来高效缓存数据。
  3. 即使消息被消费,消息仍然不会被立即删除.日志文件将会根据broker中的配置要求,保留一定的时间之后删除
  4. 采用linux Zero-Copy提高发送性能。
  5. Topic划分为多个partition,提高parallelism
  6. 可以通过实现Partitioner接口来定制Partition的分区规则
  7. At least one 消息绝不会丢,但可能会重复传输
  8. 通过冗余机制来保证信息的安全
  9. 一个Broke可以包含多个Topic的Part,一个Topic也可以将多个Part分布到不同的不同的Broke上
  10. 数据压缩:支持GZIP和Snappy压缩协议

Consumer 公共特性

  1. Consumer根据消费能力自主控制消息拉取速度
  2. Consumer根据自身情况自主选择消费模式,例如批量,重复消费,从尾端开始消费等

Lower Level Consumer

  1. Consumer从kafka集群pull数据
  2. Consumer负责维护消息的消费记录,控制获取消息的offset
  3. Consumer可将offset设成一个较小的值,重新消费一些消息
  4. 必须找出指定Topic Partition中的lead
    broker
  5. 添加事务管理机制以保证消息被处理且仅被处理一次
  6. 在一个处理过程中只消费Partition其中的一部分消息

High Level Consumer

  1. High Level模式下的Group Name 是整个Kafka集群的全局变量
  2. 消息消费以Consumer Group为单位,每个Consumer Group中可以有多个consumer,每个consumer是一个线程,topic的每个partition同时只能被某一个consumer读 取,Consumer Group对应的每个partition都有一个最新的offset的值,存储在zookeeper上的。所以在正常情况下不会出现重复消费的情况。
  3. 因为consumer的offerset并不是实时的传送到zookeeper(通过配置来制定更新周期),所以Consumer如果突然Crash,有可能会读取重复的信息
  4. High Level Consumer 可以并且应该被使用在多线程的环境,线程模型中线程的数量(也代表group中consumer的数量)和topic的partition数量有关,下面列举一些规则:
    1. 当提供的线程数量多于partition的数量,则部分线程将不会接收到消息;
    2. 当提供的线程数量少于partition的数量,则部分线程将从多个partition接收消息;
    3. 当某个线程从多个partition接收消息时,不保证接收消息的顺序;可能出现从partition3接收5条消息,从partition4接收6条消息,接着又从partition3接收10条消息;
    4. 当添加更多线程时,会引起kafka做re-balance, 可能改变partition和线程的对应关系。

Consumer Group

  1. 允许consumer
    group(包含多个consumer,如一个集群同时消费)对一个topic进行消费,不同的consumer
    group之间独立订阅,互不干扰。
  2. 当broker或consumer加入或离开时会触发负载均衡算法,使得一个consumer
    group内的多个consumer的订阅负载平衡
  3. 每个partition只会被consumer
    group内的一个consumer消费,故kafka保证每个partition内的消息会被顺序的订阅,但多个Consumer
    Group可同时消费这一消息。。
  4. 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group
  5. 如果需要实现广播,只要每个Consumer有一个独立的Group
  6. 要实现单播只要所有的Consumer在同一个Group里

Zookeeper

  1. 每个broker启动后会在zookeeper上注册一个临时的broker
    registry,包含broker的ip地址和端口号,所存储的topics和partitions信息。
  2. 每个consumer启动后会在zookeeper上注册一个临时的consumer
    registry:包含consumer所属的consumer
    group以及订阅的topics。
  3. 每个consumer
    group关联一个临时的owner registry和一个持久的offset
    registry。对于被订阅的每个partition包含一个owner
    registry,内容为订阅这个partition的consumer id;同时包含一个offset registry,内容为上一次订阅的offset
时间: 2025-01-11 16:24:14

Kafka知识点汇总的相关文章

赵雅智:js知识点汇总

赵雅智:js知识点汇总,布布扣,bubuko.com

CodeIgniter框架——知识点汇总

NO1.学习要点: 一.CodeIgniter 框架的简介 二.CodeIgniter 框架的安装 三.CodeIgniter 框架的目录结构分析 四.CodeIgniter 框架是如何工作的? 五.CodeIgniter 框架中的控制器.视图.模型及数据库操作 六.CodeIgniter 框架中辅助函数.类库.适配器的学习 七.…… NO2. 一.CodeIgniter 是什么? 1.CodeIgniter 是一个应用程序框架 CodeIgniter 是一个为用 PHP 编写网络应用程序的人员

《正则表达式》知识点汇总摘录

开园一个月了,但一直没有抽出多少时间,就算有时间,也不知道怎么组织语言记(不是写,是记,写是一个创造的过程,像我这等程序猿,猿嘴吐不出象牙!)点东西!翻翻过去手头整理的一些知识点杂记,然后再结合网上的一些,今天对正则表达式在做一个个人的知识汇总摘录吧!程序员都是共产主义者,一点不假!大部分时候我们只是互联网的搬运工,堆砌者(扯远了,当然成为互联网创造者一直使我们的目标!). 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串&quo

软考网络工程师易混淆的知识点汇总

网络工程师考试是全国计算机技术与软件水平考试的一项中级资格考试,通过考试的合格人员能根据应用部门的要求进行网络系统的规划.设计和网络设备的软硬件安装调试工作,能进行网络系统的运行.维护和管理,能高效.可靠.安全地管理网络资源,作为网络专业人员对系统开发进行技术支持和指导,具有工程师的实际工作能力和业务水平,能指导网络管理员从事网络系统的构建和管理工作.网络工程师考试是软考的一大热门,怎样才能顺利通过考试是广大考生都想知道的,下面希赛软考学院为您带来网络工程师备考锦囊之应战篇,专业老师整理的网络工

推荐系统知识点汇总

整理归纳一下<推荐系统实践>和<推荐系统导论>两本书的知识点,文中排版格式可能会有点乱,如有问题请指正.OK,闲话不说,先上2张图 对推荐系统的建模数据进行分析,代表型数据:1)无上下文的隐形反馈数据:2) 无上下文的显性反馈数据:3) 有上下文的隐形反馈数据:4)有小上下文的显性反馈数据,其中显性的反馈数据就是用户对物品的评分,而隐形的就是用户对物品的浏览,时长等数据(不同的领域,用户对物品的行为种类不一样),像我之前的做的都全是用有上下文的隐形反馈,都是通过点击.登陆.时长归纳

python全栈开发 * 10知识点汇总 * 180612

10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表?接收任意内容) (1)动态位置参数def eat(*args): print(args)eat("水果","蔬菜","肉",)# # 结果以元祖的形式呈现. : ('水果', '蔬菜', '肉') (2) 位置参数,动态位置参数: 动态参数必须在位置参数后?def eat(a,b,*args): print(a,b,args)e

离散知识点汇总

离散知识点汇总 += %02d #include<string.h> a[i],a[100] += 这表示把左边的数加上/减去右边的数的和/差赋值给左边的数 %02d %d:即为普通的输出. %2d:按宽度为2输出,右对齐方式输出.若不够两位,左边补空格. %02d:同样宽度为2,右对齐方式.位数不够,左边补0 %.2d:从执行效果来看,与%02d一样 #include<string.h> C语言标准库中一个常用的头文件,在使用到字符数组时需要使用.string .h 头文件定义了

【数据库】数据库面试知识点汇总

转自:https://www.cnblogs.com/wenxiaofei/p/9853682.html 数据库面试知识点汇总 一.基本概念 1.主键.外键.超键.候选键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键.一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键.超键包含候选键和主键. 候选键:是最小超键,即没有冗余元素的超键. 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Nul

C++知识点汇总文档

C++知识点汇总文档 持续更新 朝花夕拾. 不写下来, 仿佛一切都没了见证. 编程来源于生活, 无非是对现实的抽象. 整理这份文档的时候我才发现, 自己对C++的了解无非是冰山一角 另, C++11真的太恐怖了, 新"特性"真的是"恐怖如斯" 另注: 本人才疏学浅, 难免有错漏之处, 还望不吝赐教 1.基本概念 内存管理 C++中的内存划分(内容来自博客): 堆 由用户使用new delete关键字管理的内存区域 栈 栈中用来存放临时变量, 比如函数中的局部变量,