Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 关于分区创建的Kafka数据行为_Apache Kafka - Fatal编程技术网

Apache kafka 关于分区创建的Kafka数据行为

Apache kafka 关于分区创建的Kafka数据行为,apache-kafka,Apache Kafka,我正在测试在正在运行的系统中添加Kafka分区,但我不清楚如果将分区添加到现有主题中,Kafka如何管理现有数据 例如: 我有一个Kafka实例,主题名为test,有一个分区和一个副本 生产者组开始插入该主题,消费者组开始消费 我更改主题以添加另一个分区 在这种情况下,主题数据会发生什么变化?是在两个分区之间重新平衡,还是只有新生成的数据才会使用新分区 添加分区不会改变现有数据的分区,因为它基于“仅追加”的理念。例如,如果数据是按哈希(键)%分区的数量进行分区的,则此分区可能会通过添加分区而被洗

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

例如:

  • 我有一个Kafka实例,主题名为
    test
    ,有一个分区和一个副本
  • 生产者组开始插入该主题,消费者组开始消费
  • 我更改主题以添加另一个分区

  • 在这种情况下,主题数据会发生什么变化?是在两个分区之间重新平衡,还是只有新生成的数据才会使用新分区

    添加分区不会改变现有数据的分区,因为它基于“仅追加”的理念。例如,如果数据是按哈希(键)%分区的数量进行分区的,则此分区可能会通过添加分区而被洗牌,kafka不会尝试重新平衡/重新分发它。

    添加分区不会触发对当前主题分区中已有数据的任何重新分发。只有新生成的数据将被发送到新分区,并且当添加新分区时,必须考虑以下问题… 如果您使用的是默认分区器,并且您使用密钥发送消息,则其工作方式如下:哈希(密钥)%number\u分区。
    Kafka保证具有相同密钥的消息会进入相同的分区,但在添加分区时情况并非如此,因为在前面的公式中,分区数会发生变化,因此具有密钥=k1的消息会在添加分区之前进入分区0,例如,现在可以进入分区1(由于新分区)。

    ,是否有一种惯用的方法(1)添加分区和(2)确保保持顺序?带有密钥k1的消息m1被发送到分区p2。添加分区后,带有密钥k1的消息m2映射到分区p3。因此,消费者可以首先从p3读取m2,然后从p2读取m1。