分区创建时的Kafka数据行为

时间:2018-04-12 12:53:16

标签: apache-kafka

我正在测试在正在运行的系统中添加Kafka分区,但是如果您向现有主题添加分区,Kafka如何管理现有数据并不清楚。

例如:

  1. 我有一个名为test的主题的Kafka实例,包含1个分区和1个副本。
  2. 生产者组开始插入该主题,消费者组开始消费。
  3. 我改变主题以添加另一个分区。
  4. 在这种情况下,主题数据会发生什么?是在两个分区之间重新平衡还是只有新生成的数据才会使用新分区?

2 个答案:

答案 0 :(得分:1)

添加分区并不会改变现有数据的分区,因为它基于"仅附加"的哲学。例如,如果数据按哈希(密钥)%number_of_partitions进行分区,则这个分区可能会通过添加分区来改组,kafka不会尝试重新平衡/重新分配它。

答案 1 :(得分:0)

添加分区不会触发当前主题分区中已存在的数据的任何重新分发。只有新生成的数据才会被发送到新分区,并且在添加新分区时必须考虑以下问题... 如果您使用默认分区程序并且使用密钥发送邮件,则它按以下方式工作:hash(key)%number_partitions。 Kafka保证使用相同密钥的消息进入相同的分区但是在添加分区时不是这样,因为在上一个公式中,number_partitions会更改,因此在添加分区之前,key = k1的消息会转到分区0,例如,现在可以转到分区1(由于新分区)。