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

Kafka在消费者之间分发来自分区的消息

宣意致
2023-03-14

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

共有3个答案

吉毅
2023-03-14

你说的话违背了分区的目的。分区不是为 kafka 中的简单负载平衡而设计的。如果你真的想要,你有两个选择。

  1. 如果您能够控制制作者生成该主题,请执行简单的 mod 3 哈希分区。因此,消息将在 3 个分区中平均分布。现在,您的每个使用者都将从一个分区进行消费。这实际上意味着每个消费者每三条消息中就有一条被读取。这解决了你的问题。
  2. 如果您无法控制生产者,请以正常方式从主题中消耗。编写一个具有简单mod 3哈希分区的生产者,并将其生成为新主题。再次从该主题中消耗。同样的事情与第一种情况重复。
韦棋
2023-03-14

这样怎么样,在生产者,消息是基于一些密钥路由的。可以将消息1路由到分区1,消息2路由到分区2,消息3路由到分区3。然后您应该将三个消费者分组到一个组中。可以让消费者1消费分区1,消费者2消费分区2,消费者3消费分区3。

顺便说一句,如何实现它取决于您使用的kafka客户端,消息是什么。您应该提供更多详细信息。

燕朝明
2023-03-14

为了做到这一点,你必须实现一个消费者群体。它是与Kafka一起开箱即用的。您只需为您的树消费者指定相同的group.id。

[编辑]但是,每个消费者会在不同的Kafka分区阅读。我认为,如果只使用Kafka API,那么在同一个分区中读取相同的组是不可能的。

在文档中查看更多内容:http://kafka.apache.org/documentation.html#intro_consumers

 类似资料:
  • 我有4个分区和4个消费者(例如A、B、C、D)。如何使用使用者组配置哪个使用者将从哪个分区读取数据。我用的是Kafka的春靴。

  • 我知道kafka将一个主题的数据安排在许多分区上,一个消费者组中的消费者被分配到不同的分区,从那里他们可以接收数据: 我的问题是: 术语,它们是由主机/IP标识的,还是由客户端连接标识的? 换句话说,如果我启动两个线程或进程,使用相同的消费者组运行相同的Kafka客户端代码,它们被认为是一个消费者还是两个消费者?

  • Flink kafka消费者有两种类型的消费者,例如: 这两个消费者层次结构扩展了相同的类。我想知道维护编号类背后的设计决策是什么?我们什么时候应该使用其中一种? 我注意到带有数字后缀的类有更多的特性(例如ratelimiting)。 https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-kafka

  • null 我在这一页上读到以下内容: 使用者从任何单个分区读取,允许您以与消息生成类似的方式扩展消息消耗的吞吐量。 也可以将使用者组织为给定主题的使用者组-组内的每个使用者从唯一分区读取,并且组作为一个整体使用来自整个主题的所有消息。 如果使用者多于分区,则某些使用者将空闲,因为它们没有可从中读取的分区。 如果分区多于使用者,则使用者将从多个分区接收消息。 如果使用者和分区的数量相等,则每个使用者

  • 假设我有一个名为“MyTopic”的主题,它有3个分区P0、P1和P2。这些分区中的每一个都有一个leader,并且本主题的数据(消息)分布在这些分区中。 1.Producer将始终根据代理上的负载以循环方式写到分区的领导者。对吗? 2.制作人如何认识隔断的首领?

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