当前位置: 首页 > 知识库问答 >
问题:

创建分区时的Kafka数据行为

金泉
2023-03-14

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

例如:

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

在本例中,主题数据发生了什么?是在两个分区之间重新平衡,还是只有新生成的数据才会使用新分区?

共有1个答案

尚棋
2023-03-14

添加分区不会改变现有数据的分区,因为这是基于“只追加”的哲学。例如,如果数据是由hash(key)%number_of_partitions分区的,那么这个分区可能会通过添加分区而被洗牌,kafka不会尝试重新平衡/重新分配它。

 类似资料:
  • 我有以下代码: ...原因:java.lang.ClassNotFoundException:com.fasterxml.jackson.databind.jsonNode在java.base/jdk.internal.loader.builtInclassLoader.LoadClass(builtInclassLoader.java:581)在java.base/jdk.internal.lo

  • 我创建一个数据文件,导入一个大约8MB的csv文件,如下所示: 最后,我打印dataframe的分区数: 答案是2。

  • 来自Kafka常见问题页面 在Kafka生产者中,可以指定分区键来指示消息的目标分区。默认情况下,基于散列的分区器用于确定给定键的分区id 因此,具有特定密钥的所有消息将始终转到主题中的同一分区: 消费者如何知道生产者写入了哪个分区,从而可以直接从该分区进行消费 如果生产者多于分区,并且多个生产者正在写入同一分区,那么偏移量是如何排序的,以便消费者可以使用来自特定生产者的消息

  • 通过Kafka文档和各种其他资源,我了解到Kafka中的消息被组织成主题。此外,主题可以分解为多个分区,每个分区可以托管在不同的服务器上。这提供了冗余和可伸缩性。 我不确定这里的“破碎”这个词是什么意思。这是否意味着,如果添加到主题的消息是,例如“1 2 3 4 5 6 7”,那么在将其分解为分区后,我们将有一个分区仅包含整个主题的子部分。就像一个分区有“1 2 3”,而另一个分区有“4 5 6”

  • 我正在NodeJs应用程序中使用kafka-node通过loadMetadataForTopics选项创建主题。我希望我的应用程序动态地了解可用分区的数量,以便它能够在这些分区上正确地分发消息。 在单个节点Kafka实例中,方法创建主题并返回元数据,如下所示: 但是,在三节点集群中,该方法会创建更多的条目: 在本例中,它创建了4个分区吗?在我看来是这样的--因为这只是最后一个案例场景(真的显式设置

  • 我正在学习使用Kafka在科特林的SpringKafka。我知道,当一个新主题发布时,如果不存在,它就会被创建。所以,当我向从Spring创建的新/旧主题发送一个值时,默认分区是0,但我想在另一个分区上写一条消息,比如分区1。 当我创建/写一个主题时,它是有效的: 但是,当我使用以下选项选择分区和密钥时: 我得到了以下错误: 我试着把钥匙换成,但也没用。显然,当我从Spring客户端创建一个主题时