如何动态扩展Kafka流处理?

时间:2019-05-16 18:21:57

标签: java python apache-kafka kafka-consumer-api

我有一个固定数量的主题分区。生产者在一天中的不同时间以不同的速率生产数据。

我想基于一天中的小时动态地添加消费者,以便我能尽快处理记录。

例如,我有一个主题的10个分区。我想在非高峰时段部署5个消费者,在高峰时段部署20个消费者。

我的问题是,当我有20个消费者时,每个消费者都会收到重复的记录,这是我想避免的。我只想处理唯一记录,以加快记录处理速度。

有什么机制可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

如果您有N个分区,则在同一使用者组中最多可以有N个使用者,每个使用者都从一个分区读取。当使用者少于分区时,某些使用者将从多个分区中读取数据。另外,如果您有更多的使用者,而不是分区,那么某些使用者将处于非活动状态,并且根本不会收到任何消息。

因此,如果要启动20个使用者,则需要将主题的分区数增加到至少20个,否则,您的使用者中有10个将处于非活动状态。

关于您提到的重复项,如果所有使用者都属于同一组,则每条消息将只使用一次。

总结一下,

  1. 将主题的分区数增加到20。
  2. 创建一种机制,该机制将根据高峰/非高峰时间创建并杀死消费者,并确保当您踢消费者时,它属于现有的消费者组,因此消息仅被消费一次。