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

分区数量超过使用者时的Apache Kafka消息消耗

姬向明
2023-03-14

如果我运行的Kafka集群的分区比我的单个消费者组拥有的消费者还多。对消息的排序或跨分区的消息的按时传递是否有任何保证?

简单示例:
2个分区,1个使用者
生产者通过一个密钥控制分区分配。
消息1进入并转到分区a
消息2进入并转到分区B
消息3进入并转到分区a

我知道消息1将在消息3之前被使用,因为它们在同一个分区中。但是第二条信息呢?是在消息3之前消费还是在消息3之后消费?还是会有变化?它可能在消息%1之前被使用吗?

此外,如果新消息持续进入分区A,并且生产速度快于消耗速度,怎么办?消息2会无限期地坐在分区B中吗?什么时候消费?有什么保证这些信息不会永远留在那里吗?

更一般地说:如果一个使用者被分配给多个分区,那么该使用者如何以及何时在这些分区之间交换?

共有1个答案

全彬
2023-03-14

Kafaka只在分区内提供订购保证。在您的示例中,消息2可能在消息1之前、消息1之后或消息3之后使用。那只取决于消费者的表现。有关这方面的更多信息,请参阅文档:https://kafka.apache.org/documentation.html#Introduction(“consumers”和“consurants”主题)。

Kafaka经纪人并不了解消费者。它将消息存储在日志段中,直到相应的日志段被删除。使用者可以随时附加到代理,并从最早的日志段开始使用。最小邮件保留时间由两个配置属性控制:log.retention.hourslog.retention.bytes(每个主题可能覆盖)。有关这方面的更多信息,请参见文档:https://kafka.apache.org/documentation.html#brokerconfigs。

回答您的问题:如果消费者最终变得比生产者慢,它有一些时间来赶上(默认为1周)。如果它没有,一些非消费的消息将被永远删除。

高级使用者创建几个kafkastream对象,每个对象提供来自一个或多个分区的数据。如何使用这些流取决于您:在单独的线程中,循环,等等。还可以获取消息的时间戳,并将这些流合并到一个恢复消息顺序的流中。

 类似资料:
  • 我有一个Kafka主题,目前有3个分区。我希望我的消费者从同一个分区读取,但每条消息都应该以循环方式发送给不同的消费者。有可能实现吗?

  • 本文向大家介绍Kafka 消费者是否可以消费指定分区消息?相关面试题,主要包含被问及Kafka 消费者是否可以消费指定分区消息?时的应答技巧和注意事项,需要的朋友参考一下 Kafa consumer消费消息时,向broker发出fetch请求去消费特定分区的消息,consumer指定消息在日志中的偏移量(offset),就可以消费从这个位置开始的消息,customer拥有了offset的控制权,可

  • 这是一个关于Kafka和信息如何被消费的非常基本的问题,但不幸的是,我在这一点上找不到任何答案。 假设我想过度分区,那么我将得到比消费者多10倍的分区。过度分区是必需的,因为我希望能够扩展(在未来并行处理更多的消息)。 1 个主题分为 1000 个分区,由 100 个使用者使用 =- 我的问题是: > 消息是如何为每个消费者消费的:它是以循环方式完成的吗?如果不是,分发是如何完成的? 有没有保证消

  • 我已经在kafka上工作了相当长的六个月,我对用户延迟和存储到主题分区中的数据有一些疑问。 问题1:最初,当我开始阅读Kafka并了解如何使用Kafka的功能时,我被教导说,一个只有一部分和一个复制因子的主题会创造奇迹。经过相当长的六个月的工作,将我的项目迁移到live之后,使用我的主题消息的消费者开始给我一个延迟。我阅读了许多关于消费者延迟的堆栈溢出答案,得出结论,如果我增加某个主题的分区和复制

  • 我试图做一个简单的poc与Spring启动与版本(2.3.7发布)的SpringKafka,以实现消费者批处理的工作原理,以及如何再平衡工作,如果消费者需要更多的流转时长,因为我是全新的这个消息系统。 现在我看到kafka重新平衡单个消费者(不允许并发)的问题。 这些是我设置的max.poll.interval属性。ms=50000和factory.getContanerProperties。se