kafka学习笔记

  1. Kafka概述
    是一个分布式的基于发布订阅模式的消息队列
    2.Kafka几个角色
    Broker: 每一个kafka进程实例
    Topic:用来对消息进行分类
    Partition: 分区,用于对某个topic做发送的负载均衡
    Leader:生产者和消费者对某一个topic实际发送和消费的来源
    Follower:对某一个topic做冗余备份
    Producer:消息生产者
    Consumer:消息消费者

Topic-》分区-》 分区副本
一个topic可以通过负载均衡到不同的partition-leader中。每个partition-leader又可以有自己的分区副本partition-follower

Consumergroup-》consumer-》分区
一个消费者组里面可以有多个消费者,每个消费者对同一个topic的不同partition-leader进行消费。但是不同消费者组里面的不同消费者可以对同一个topic的不同partition-leader进行消费

Consumergroup可以做消费者消费的负载均衡

Zk: 用来管理 kafka集群的元数据信息,以及保存消费进度(跟kafka版本有关系,0.9之前是存在在zk中。0.9之后存在 kafka本地(topic- counsumer-offsets)的系统topic中)
3.消息的有序性
由于分区的存在,每个topic下的所有分区都各自维护了自己的offset。Kafka无法保证topic的全局的有序性,只能保证区内的有序性
4.Kafka的文件存储
.Index 和 .log

.Index 存储偏移量及在.log文件中的偏移量,消息长度
.log 存储topic某一个分区下的所有消息,a和消息的偏移量

kafka文件的命名方式,是以当前第一条消息的起始偏移量进行命名的。这样做是方便消费者拉取消息的时候快速定位到消息所在的index文件。

5.kafka消费者是如何找到需要消费的消息?
消费者通过偏移量和二分查找法找到消息所在的index文件,在index文件中找到对应的在log文件中的偏移量。 当找到偏移量后 去log文件获取消息内容

6.生产者的分区策略
类似于rocketmq的生产者发送负载均衡算法

7.Kafka的ack机制,通过生产者acks参数进行配置
0:producer只管发送数据就返回ack,broker挂了或者发送时由于网络的原因会导致数据丢失
1: leader落盘后发送ack给发送者,发送ack前,leader挂了会导致数据丢失
-1: leader和ISR 中的follower都落盘后发送ack给发送者,如果在发送ack前,leader挂了,会导致数据重复

8.Kafka集群数据一致性,hw和leo
每个副本的 高水位和 最大偏移量
在同一个分区内,取分区内所有副本中最大偏移量最小的那个偏移量作为高水位,因此同一个分区内的所有副本的高水位都是相同的。 高水位之前的数据是消费者可见的数据
9.exactly once语义
精准一次性的将消息发送到kafka集群,保证不出现数据丢失和数据重复的情况
当ack为0时,可以保证消息最多发送一次
当ack为-1是,可以保证消息至少发送一次,数据不会丢失

精准一致性 = 至少一次 + 幂等性

Kafka通过分配给producer的pid ,发送消息的partition,每条消息携带的seqnum,来对重复消息进行去重。 kafka不能保证跨会话或者跨分区的幂等性


kafka精准一次性

10.消费者的分区策略
Round robin:按同一消费者组中的所有消费者订阅的所有主题的分区进行分配分区
问题:当消费者组中的消费者消费了不同的主题,会发生有一些分区没办法进行正常的消费数据
Range(kafka默认): 按同一消费者组中的消费者订阅的某一个主题的分区进行分配分区
问题:会出现消费不均衡
当消费者数目发生变化,会触发分区重分配

11.消费者的offset的存储
Consumergroup + topic + partition来确定消费者的消费进度,即使这个分区被该消费者组下的新的消费者进行消费也可以拿到上一个消费者消费的offset
消费者每隔1s提交offset到系统主题中__consumer_offset

12.kafka高效读写数据
顺序写磁盘,零拷贝技术,分布式

13.Kafka的事务
生产者事务:
Pid只能保证单分区和单会话的精准一次性。要实现跨会话和分区的精准一次性就需要用到生产者事务。那么什么是生产者事务呢?
生产者客户端将消息携带上Transaction id 和 pid绑定,交由 kafka的transaction coordinator进行维护


事务跨会话跨分区的精准一次性

image.png

消费者事务:
Kafka的消费者事务较弱。因为消费者是通过offset进行消费的

14.Kafka的再均衡
再均衡是指当分区的所属消费者个数发生变更的时候,再均衡发生期间,消费者无法拉取消息。即使当消费者个数大于分区数的时候,消费者个数发生变化了还是会出发再均衡

15.Kafka的ISR,同步副本
Kafka没有采取半数同步的机制(半数同步机制在允许N个节点挂掉时候,需要有2n+1个节点,最后才能保证有1个点是已经被同步过的)。kafka采取了全数同步的机制(这个会有点问题,当进行ack的时候,有一个节点挂掉了,那么这个时候就永远不可以完成ack了),因此kafka并且做了一些优化,也就是ISR,每一个分区都会有一个ISR,里面存放的是该分区的同步的副本。之后数据的同步,以及leader的选举都是在ISR中进行的


同步副本

16.Kafka的故障处理
hw和leo。 hw保证消费的一致性和分区副本存储的一致性。
消费的一致性:超过hw的不可以被消费。假设如果超过hw的可以被进行消费,那么由于ISR中的leo会有可能不同,当leader出现故障了,由于已消费的offset>新leader的leo,导致后续消费者无法再进行消费。
存储的一致性:当ISR的leader节点发生故障的时候,为了保证副本之间的一致性,选举的新的leader会让follower高出自己的进行截断,如果follower高出了hw也进行截断,保证了新的ISR中各副本数据的一致性
因此hw只能保证副本之间的数据一致性,不能保证数据不丢失或者不丢失,数据是否丢失应该由ack机制来保证。

17.分区策略
RoundRobin:针对消费者组里消费者订阅的所有主题来分,当消费者组里的消费者订阅了不同的主题就会有可能导致错分。所以使用这种方式约定,消费者组里的消费者订阅的主题需要相同
Range:默认,按照主题的分区按范围来分给消费者组中的消费者

补充分区分配策略的举例:(2020-10-21)
两个topic,每个topic10个分区:
topic1: A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
topic2: B1 B2 B3 B4 B5 B6 B7 B8 B9 B10
消费者三个,都订阅了topic1、topic2:
C1
C2
C3

range:
C1: A1 A2 A3 A4 B1 B2 B3 B4
C2: A5 A6 A7 B5 B6 B7
C3: A8 A9 A10 B7 B8 B9 B10

roundrobin:
C1: A1 A4 A7 A10 B3 B6 B9
C2: A2 A5 A8 B1 B4 B7 B10
C3: A3 A6 A9 B2 B5 B8

sticky:
目标:分配的更均匀, 再均衡时会尽量避免消费者的分区出现变化
如果订阅和topic是均匀的,那么分配的结果和roundrobin是一致

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342