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

消费者再平衡期间的Kafka消息排序

刘高驰
2023-03-14

在消费者重新平衡期间如何确保消息排序。假设最初我们有四个分区:p1、p2、p3、p4和两个消费者c1和c2(在同一组中)。因此每个消费者得到两个分区,例如c1 : p1,p2和c2 : p3,p4。

现在添加了新的消费者,比如c3和c4,重新平衡发生,这样每个消费者都有一个分区,比如c1: p1、c2: p2、c3: p3、c4: p4。

在此期间,消费者c1可能正在处理来自分区p2的消息(在重新平衡之前)

并且消费者c2也开始处理p2消息(在重新平衡之后)

即使这是角落情况,这是消息排序的预期行为吗?

共有2个答案

万喜
2023-03-14

实际上没有跨分区的消息排序,因此这是一种预期的行为,C1在C2接管P1并在重新平衡后开始读取之前消耗P1。

徐昕
2023-03-14

在此期间,消费者c1可能正在处理来自分区p2的消息(在重新平衡之前)

消费者c2也开始处理p2消息(在重新平衡之后)

是的。但是这与消息排序有什么关系?只要没有错误,c1就应该完成当前记录的处理(假设使用偏移量X),并且在重新平衡后,c2将继续处理偏移量X 1的记录。

并且即使出现错误并且c1未能提交偏移量X,c2也将重新处理一些已经处理的消息,但是对于分区p2,顺序仍将被保留。

如果具有偏移量X1的记录将在具有偏移量X2的记录之前被处理,则分区将不被按序处理

长话短说:是的,这是设计的行为

如果您构建了一个无状态应用程序,并且每个记录都被独立处理,这将非常顺利。如果您想要状态,您需要确保它在重新平衡后(在c2开始处理数据之前)将分区p2的状态从消费者c1转移到c2。移动状态实际上是一个棘手的问题,您应该考虑使用Kafka Streams-Kafka的流处理库,它可以自动为您处理此问题:http://docs.confluent.io/current/streams/index.html

 类似资料:
  • 有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。

  • 我们正在运行一个3 broker Kafka 0.10.0.1集群。我们有一个java应用程序,它产生了许多消费线程,从不同的主题消费。对于每一个主题,我们都指定了不同的消费者群体。 很多时候,我看到每当这个应用程序重新启动时,一个或多个CG需要超过5分钟来接收分区分配。在此之前,这个话题的消费者不会消费任何东西。如果我去Kafka broker并运行Consumer-Groups.sh并描述特定

  • 我有一个Kafka流应用程序,它从几个主题中获取数据,并将数据加入另一个主题。 Kafka配置: 注意:我在运行Kafka Brokers的机器上运行Kafka Streams应用程序。 每小时消耗/产生数百万条记录。每当我让Kafka经纪人倒下时,都会进入再平衡阶段,再平衡大约需要30分钟,有时甚至更长时间。 有人知道如何解决Kafka消费者的再平衡问题吗?而且,很多时候,它在重新平衡时抛出异常

  • 当一个组中只有一个消费者,并且认为消费者无法在session.time.out内进行轮询时,将触发重新平衡,但是在这种情况下,组中只有一个消费者,现在假设session.time.out是30秒和消费者民意调查后50秒组协调员将识别消费者后50秒,并允许它提交偏移或协调员将断开消费者和没有偏移得到提交,并将重新平衡消费者与新的消费者标识?如果上次提交的偏移量是345678,在下一次轮询中,它处理了

  • 当一个新的消费者/borker被添加或下降时,Kafka会触发一个再平衡操作。Kafka是在重新平衡封锁行动。Kafka的消费者是不是在一个再平衡操作正在进行的时候就被封锁了?

  • 我有一个简单的Kafka设置。生成器正在以较高的速率向单个分区生成具有单个主题的消息。单个使用者正在使用来自此分区的消息。在此过程中,使用者可能会多次暂停处理消息。停顿可以持续几分钟。生产者停止产生消息后,所有排队的消息都将由使用者处理。生产者产生的消息似乎不会立即被消费者看到。我使用的是Kafka0.10.1.0。这里会发生什么?下面是使用消息的代码部分: 代理上的所有配置都保留为kafka默认