Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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 卡夫卡主题部分的数量和数据中不同键的数量_Apache Kafka_Partition_Kafka Topic - Fatal编程技术网

Apache kafka 卡夫卡主题部分的数量和数据中不同键的数量

Apache kafka 卡夫卡主题部分的数量和数据中不同键的数量,apache-kafka,partition,kafka-topic,Apache Kafka,Partition,Kafka Topic,我想使用键/值模式写入Kafka,以便在读取数据时保持相同的数据写入顺序。 我的问题是主题中的分区数是否应该等于传入数据中不同键的数目。 我已经知道,对于键/值模式,具有相同键的数据将进入相同的分区 因此,如果分区的数量不等于数据中不同键的数量,那么我们可以让数据在同一分区中具有不同键?在这种情况下,如何保持数据顺序 来自卡夫卡文档: 每个分区都是一个有序的、不可变的记录序列 不断附加到结构化提交日志。档案 每个分区都分配了一个称为偏移量的顺序id号 唯一标识分区内每个记录的 生产者发送到特定

我想使用键/值模式写入Kafka,以便在读取数据时保持相同的数据写入顺序。 我的问题是主题中的分区数是否应该等于传入数据中不同键的数目。 我已经知道,对于键/值模式,具有相同键的数据将进入相同的分区

因此,如果分区的数量不等于数据中不同键的数量,那么我们可以让数据在同一分区中具有不同键?在这种情况下,如何保持数据顺序

来自卡夫卡文档:

每个分区都是一个有序的、不可变的记录序列 不断附加到结构化提交日志。档案 每个分区都分配了一个称为偏移量的顺序id号 唯一标识分区内每个记录的


生产者发送到特定主题分区的消息将被删除 按发送顺序追加。也就是说,如果发送了记录M1 由与记录M2相同的生产者发送,首先发送M1,然后发送M1 偏移量将低于M2,并在日志中显示得更早


A 消费者实例按记录在存储库中的顺序查看记录 日志

这些是关于Kafka的基本规则,向同一分区发送具有不同密钥的消息不会改变这一点。您甚至可以将所有消息发送到同一分区,但第一条消息将在后续消息之前附加到日志中,并且偏移量值较低。因此,秩序将得到维护

我的问题是主题中的分区数是否应该等于传入数据中不同键的数目

我认为这通常不是一个好主意。这完全取决于您正在处理的数据。如果您有固定数量的键(如女性键、男性键和多样化键),这可能是有意义的。然而,即使这样,您也需要小心,因为这可能会导致代理上的数据负载不平衡,因为可能存在较少的差异。因此,您可能最终会在一个分区中拥有大部分数据,而另一个分区将保持为空。通常,分区的数量应该根据吞吐量需求进行调整

因此,如果分区的数量不等于数据中不同键的数量,那么我们可以让数据在同一分区中具有不同键?在这种情况下,如何保持数据顺序

是的,您可能会在同一分区中拥有不同的密钥。然后,这个特定分区的顺序保持不变,但在整个主题中不能保证。因此,假设您有键A、B和C,并且一个主题有两个分区。A和C进入第一个分区,B存储在第二个分区中。如果数据是这样流动的: A/V1、A/V2、B/V1、C/V1、B/V2

然后您的分区将按如下方式填充:

  • 第0部分:A/V1、A/V2、C/V1
  • 第1部分:B/V1、B/V2
使用此主题时,不清楚A和C消息之间的顺序与B消息之间的关系。但是,始终可以保证消息A/V1在A/V2之前使用,A/V2在C/V1之前使用,B/V1在B/V2之前使用

如果您正在寻找一种更灵活的方式将消息定向到分区中,那么您也可以考虑编写一个新的分区