Kafka 权威指南--可靠的数据传递

可靠性保证

  • 保证分区消息的顺序性
  • 只有当消息被写入分区的所有同步副本时,才会被认为是已提交的
  • 只要还有一个副本是活跃的,已提交的消息就不会丢失
  • 消费者只能读到已经提交的消息

需要在可靠性、一致性和可用性、高吞吐量、低延迟、硬件成本之间权衡。

复制

复制机制和分区的多副本是可靠性保证的核心。

同步副本条件:

  1. 与 zk 之间有一个活跃的会话,定时(默认 6 s)心跳。
  2. 一定时间内(默认 10s)从首领那里获取过消息
  3. 一定时间内(默认 10s)从首领那里获取过最新消息

broker 配置

复制系数

  • topic 级别–replication.factor
  • broker 级别–default.replication.factor
  • 权衡可靠性与硬件成本

不完全的首领选举

  • broker 级别–unclean.leader.election
  • 允许不同步的副本参与首领选举,会导致消息消息
  • 不允许不同步的副本参与首领选举,可能会导致一段时间的不可用
  • 权衡可靠性和可用性

最小同步副本

  • topic/broker 级别–min.insync.replicas
  • 如果剩余活跃副本小于最小同步副本,生产者无法再发送消息
  • 权衡可靠性和可用性

在可靠系统里使用生产者

发送确认

acks=0/1/all

配置生产者的重试参数

  • broker 返回的错误分为可重试错误和不可重试错误
  • 重试只能保证消息至少一次被保存,还需要应用程序进行幂等处理

额外的错误处理

  • 不可重试的 broker 错误
  • 消息发送前的错误
  • 生产者达到重试次数上限时或消息占用的内存达到上线时

在可靠的系统里使用消费者

消费者的可靠性配置

  • group.id
  • auto.offset.reset
  • enable.auto.commit
  • auto.commit.internal.ms

显示提交偏移量

  • 总是在处理完事件后再提交偏移量
  • 提交频度是性能和重复消息数量之间的权衡
  • 确保对提交的偏移量心里有数
  • 再均衡
  • 消费者可能需要重试
  • 消费者可能需要维护状态
  • 长时间处理
  • 仅一次传递

验证系统可靠性

配置验证

  • VerifiableProducer 和 VerifiableConsumer
  • 测试
    • 首领选举
    • 控制器选举
    • 依次重启
    • 不完全首领选举

应用程序验证

  • 客户端从服务器断开连接
  • 首领选举
  • 依次重启 broker
  • 依次重启消费者
  • 依次重启生产者

在生产环境监控可靠性

  • 生产者 JMX 度量指标
  • 消费者 consumer-log
-------------本文结束感谢您的阅读-------------

本文标题:Kafka 权威指南--可靠的数据传递

文章作者:

发布时间:2020年01月12日 - 00:01

最后更新:2021年12月20日 - 16:12

原始链接:http://huihui.couplecoders.tech/2020/19RF5T/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。