NingG +

Apache Kafka 0.10 技术内幕:最佳实践

简介

Kafka 最佳实践:

  1. 吞吐量 vs. 数据实时性
  2. 并发效率:数据倾斜
  3. 数据丢失,典型问题:
    • 数据丢失 1:producer 侧
    • 数据丢失 2:consumer 侧

提升:吞吐量

吞吐量 vs. 数据实时性,之间做一个权衡:

具体 Producer API 的属性配置:

数据倾斜

简介

要解决数据倾斜的问题,主要从 Producer 入手,弄清楚 Producer 生成的 Msg,是如何选择传输到哪个 Partition 的。只要让 Producer 把生成的 Msg 均匀的分发到各个 Partition 中,就解决了数据倾斜问题。

Producer 产生的数据,送入哪个 Partition

自定义路由策略:

发送 msg 时,需要同时设定:key、msg:

key 为 null 时,msg 发送到哪个 Partition

简单回答一下「key 为 null 时,msg 发送到哪个 Partition」答案是:跟使用的 Producer API 有关:

  1. new Java Producer API轮循,round-robin,每次换一个 partition
  2. legacy Scala Producer API:随机一个 partition index,并且缓存起来,每 10 mins 清除一次缓存 ,随机下一个 partition index,并再次缓存

特别说明:

new Java Producer API,从 Kafka 0.8.2.x 开始引入,但后续版本中,仍然保留 legacy Scala Producer API

最佳实践建议

为了最大程度减弱数据倾斜现象,最佳策略:

  1. Producer 发送 msg 时,设置 key
  2. 对 key 没有特殊要求时,建议设置 key 为随机数

Partition 与 Consumer 之间如何对应起来?

几个简单说明:

思考:consumer thread 正在处理某个 partition 时,如何转去处理 另一个 partition(补充详细操作)

Note:consumer、broker 的变化,会触发 reblance,重新绑定 partition 与 consumer 之间的消费关系。

数据重复消费

Consumer 重复消费 msg,一般 2 种原因:

  1. producer 向 Kafka 集群重复发送数据
  2. consumer 从 Kafka 读取数据,并且 offset 由 consumer 控制:
    1. consumer 消费完 msg 之后,未将 offset 更新至 zookeeper,然后 consumer 宕机
    2. 重启之后,consumer 会重复消费 msg
    3. Note:向 zookeeper 提交 offset 的时间间隔:auto.commit.interval.ms,默认,60 000 ms (1 mins)

补充几点知识:

Producer 设置同步发送、异步发送

Producer 触发 Broker 同步复制、异步复制

consumer 对应 offset 存储的问题

offset 存储问题:

Kafka 0.8.2+ 开始,offset 管理策略有改进:

Consumer 处理能力感知

Consumer 的处理能力感知:

  1. Kafka:一个 partition 只能被一个 consumer 处理
  2. 某个 consumer 处理能力很强时,如何设置 consumer 切换处理其他 partition?

需要弄清楚:

  1. Kafka 的 Consumer API 中解决了上述问题了么?
  2. 解决上述问题,基本思路是什么?

结论

Kafka 作为新一代数据平台核心组件,不会感知计算能力,而是以「数据」为第一公民,Consumer 处理能力很强时,不会类似 Fork-Join 机制一样去处理其他 Partition,而是类似 Map-Reduce 机制,Consumer 处理完之后,就会空转。

先看一个问题:

  1. consumer 消费 partition 中数据,当没有新数据时,consumer 会断开连接吗?
  2. partition 中有新的数据产生时,consumer 会定期查询、并获取最新数据吗?
  3. 细节上,consumer 与 partition 中之间详细交互过程?

结论

无论partition是否有数据,consumer都会不断向broker轮询。所以不会断开连接,且会获取到最新的数据。

producer、broker、zookeeper、consumer 之间的基本关系

几个基本说法:

参考资料

原文地址:https://ningg.top/apache-kafka-10-best-practice-tips/
微信公众号 ningg, 联系我

同类文章:

微信搜索: 公众号 ningg, 联系我, 交个朋友.

Top