提升内功-kafka producer 小结

目录

  • kafka producer
    • kafka 分区策略
    • kafka 数据可靠性保证 - ack
    • kafka 数据一致性保证 - Hw
      • 消费一致性
      • 存储一致性 同少同重复

1 kafka producer

1.1 分区策略

1.1.1 分区的原因

提高并发,以分区 partition 为单位进行读写操作

1.1.2 生产者生产消息进入的分区3种策略

这三种策略的前提都是明确知道具体的topic
1. 明确知道partition index,则直接进入指定partition中
2. 不知道partition index,给出了消息对应的key,则 hash(key)mod(num(partitions)) 获取对应的分区partition编号
3. 不知道partition index, 但给出了消息的value,第一次调用时生成一个整数,并记录下来,后面每次调用在这个整数上自增,将这个值与topic 可用
的partition 总数取余 得到partition值,也是常说的 round-robin 算法

1.2 数据可靠性保证(非常重要,强烈建议深刻理解)

kafka 通过 leader partition 发送ack 机制实现消息的可靠传输;

1.2.1 leader partition 发送ack给producer的充要条件:

  1. 确保有follower 与 leader 同步完成,leader 再发送ack, 这样能保证leader挂掉之后,follower可以容灾,并从follower中选举出新的leader;
  2. 与leader 同步的follower 个数也有两种不同的策略:
    • 2.1 半数以上的follower同步完成,即可发送ack
      优点: 延迟比较低
      缺点: 选举新leader时,容忍n台节点故障,需要2n+1个副本
    • 2.2 全部follower完成同步,才发送ack
      优点: 容忍n台节点故障,需要n+1个副本
      缺点,延迟比较高
      kafka 选用全量同步,虽然延迟高,但是数据副本量比较少

1.2.2 kafka the ISR of leader partition - 解决全量同步过程中follower副本挂掉,leader长时间等待的场景

问题1

如果 follower 副本在同步leader 数据的过程中,有一个副本挂掉了,长时间不能跟leader同步,那么leader就要一直等下去,直到挂掉的follower也同步了
leader 的数据,才发送ack,这个问题该如何解决?

kafka 通过在leader partition 维护一个动态的ISR即同步副本(是个set),来保存与leader保持同步的follower集合。

follower如何被选定为ISR?
older version: 同步时间快慢 + 与leader 差异的数据条数 (尽最大努力同步)
0.9 版本 new version 去掉了与leader 差异的数据条数因为会频繁操作zk(想象一下 batch_size > 差异数据num策略),保留了同步时间策略,用来作为选取follower作为ISR元素的依据;
默认10s

1.2.3 ack 应答机制

为什么需要ack应答机制
在某些场景下可以容忍数据丢失的情况,对数据的可靠性要求不高,能够容忍数据的少量丢失,所有没有必要等待ISR中的Follower全部接收成功
所以对于不同场景下的数据可靠性传输、与数据传输性能上的要求,kafka对应给出了如下三种ack应答机制配置策略。

1.2.3.1 acks = 0

0: producer 不等待 leader partition所在的broker 回传的ack,这个操作提供了一个最低的延迟,broker接收到(还没有写入磁盘的时候就已经返回返回),当broker
故障时有可能丢失数据
1:producer 等待 leader partition 所在的broker 回传的ack,leader partition 落盘成功后返回ack,如果follower同步之前leader故障,
那么将会丢失数据。
-1: producer 等待 leader partition 所在的broker 回传的ack,partition 的leader 和follower 全部落盘成功后才返回ack。

但是,注意在 acks = -1时,在极端情况下还是可能会出现数据丢失的情况(这种情况很少见,但不代表没有),而且最容易出现的情况是数据重复
下面简单清晰的描述下这两种场景:

acks = -1,数据丢失 ISR 中的follower副本数量恰好为0,即当前leader partition接收的数据,没有follower 需要同步,且leader partition 发完ack之后挂掉了,那数据就丢失了。
acks = -1, 数据重复 如果ISR 中维护的 followers 同步完数据,leader 在发送ack给producer 之前挂掉了,那么producer就会重发数据给新晋升的leader。此时,数据就会重复发送。

leader 发送ack之前挂掉,producer重发消息给新leader

1.3 数据一致性问题

1.3.1 保证消费数据的一致性

场景描述: leader 接收了新一批数据,但是ISR 中follower还未同步完之前就挂掉了,如下图所示,假如consumer已经消费到了19,那么接下来将消费18,此时
leader挂掉,新的follower成为leader,那么去消费offset为18(当前最老的数据)就会报错。
为应对以上问题,kafka通过HW & LEO 的机制解决消费一致性问题:

leader数据多,消费完老数据后,挂掉了

解决方案:
HW - High water 高水位 即ISR 中所有 follower 中最小的LEO
LEO - 每个副本的最后一个offset

注意: HW 来保证数据一致性,高水位之前的数据是消费者可见的。

1.3.2 脑裂问题-存储的一致性

可能出现脑裂问题 ,leader 挂掉,follower 被选举为新leader, 先前挂掉的leader又重新活了起来,产生脑裂,如果此时producer又新发一批次数据,
这两个leader都会接收到数据,那么数据就发生混乱且不一致了。
将来消费的数据都不一样 。
脑补一下场面就可以了,那么如何解决脑裂产生数据不一致问题呢?
新官上任三把火: 告诉所有在ISR中记录的follower,将数据截取到HW, 跟新leader的存储数据保持一致
注意 HW只能保证副本数据的一致性,并不能保证数据丢不丢失,或者重不重复,即要少都少,要多都多

以上问题讨论的都是ISR 记录的Follower 范围。

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

推荐阅读更多精彩内容