深入了解Kafka可靠性(一)

前言

本文里面涉及到较多基础概念,如果忘记了,那么可以去看下《一文带你快速入门kafka》。

对于一个消息中间件而言,可靠性是是至关重要的要素之一。不管是面试或者实际工作中,我们都不得不面对几个问题:是几个九?消息会不会丢失?如何保证幂等?如何顺序消费?这篇文章中笔者会和大家一起去看 Kafka 是如何设计的。

针对上面的几个问题,Kafka 需要考虑包括不限于以下问题:

  • 可用性

    • Kafka 支持分布式架构,实现了故障转移,避免单点问题
      • 如何避免脑裂问题(这个要了解 Kafka 的 leader 选举机制)
    • 多副本机制,支持备份容灾
      • 数据一致性如何保证
      • 数据同步要如何实现
  • 消息问题

    • 生产者投递消息

      broker回复投递成功,但是消息丢失了。出现这种情况,一般是以下几种情况:

      1. acks 配置成 0,生产者以为自己投递成功了,但其实并没有成功写入 leader
      2. 消息持久化在 leader 分区,但是没有同步给 follower 就宕机了

      这个问题也好解决:生产者可以在发送消息前,先将消息持久化。至于多是用了存储空间,现在磁盘空间可以说是最不值钱的了,而且我们还可以定期归档压缩/删除处理,问题不大。

    • 消费者消费消息遇到消息丢失或者消息重复处理

      • 消息丢失

        消息丢失一般是以下这几种情况:

        1. 消费者拿到消息了,但是处理过程中发生异常
        2. 消费者提交消费位移的设计不合理

        针对这个问题,我们通常拿到消息会选择将消息持久化在本地,然后再做消息处理,处理出问题也可以重复处理。这种设计满足我们大多数场景,但是对于消息生产速度远高于我们持久化的速度的场景可能就不适用了,因为我们要考虑消息堆积问题。不管是这个问题,还是有些场景下无法找生产者重新投递消息的问题,都让我们期待着消息中间件可以支持消息回溯功能。

      • 重复消费

        这个可以交由使用者自己做幂等处理

    • 消息需要有序消费

      我们知道 Kafka 是分区内消息有序的。当然,需要需要有序的消息就只能使用一个分区,无疑是以 Kafka 的水平扩展能力作为代价的。如果是需要全局有序,而我们又确定使用 Kafka,而且单分区的吞吐量不能满足要求,那么我们只能自己进行额外设计来保证了。

1 acks配置对消息丢失的影响

1.1 acks=1

消息成功写入 leader 后,就会告诉生产者投递成功

acks为1 示例.png

如上图例子,一共三个分区,其中 follower1 和 follower2 均属于 ISR。假设 leader 成功写入 3 和 4 之后,ISR 还没同步,leader 就宕机了,这样就丢失了 3 和 4,如下图


acks为1 消息丢失.png

1.2 acks=-1 或者 acks=all

消息不仅要成功写入 leader,还要 ISR 中的所有 follower 同步完成后,才会告知生产者投递成功。

还是 2.1.1 的例子,这里无非会有两种情况

  • leader 在同步完成后宕机

    acks为-1 不丢消息.png
  • leader 在同步完成前宕机

    acks为-1 丢消息.png

这个配置对 Kafka 的性能会有较大影响,需要自己斟酌得失。

2 unclean.leader.election.enable

这个配置是用来控制 Kafka 是否可以选举非 ISR 中的副本为 leader,0.11.0.0 之后的版本默认为 false。虽然设置为 true 可以提高 Kafka 的可用性,但是会降低 Kafka 数据的可靠性。

3 总结

上面提出的问题均有指出和 Kafka 相关部分的设计是哪些,这里再总结以下:

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

推荐阅读更多精彩内容