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

Spring Kafka分区的多个使用者

邴越彬
2023-03-14

我们正在使用Spring kafka来消费消息。我们已经为每个分区创建了接收消息的接收器。现在我们需要多个接收者从单个分区接收消息。

对于例如。假设我们有一个分区0。目前,我们只有一个接收器(接收器1)从这个分区接收消息。现在我想为同一个分区(分区0)添加另一个接收器(接收器2)。

因此,如果生产者向这个分区发送100条消息,接收器1应该接收50条消息,其余50条消息应该在接收器2中接收。我不希望信息被复制。两个接收器类属于同一组。)我props.put(group.id,unique_group_id)

请帮助我了解这种情况是否可行。

共有2个答案

扶冠宇
2023-03-14

如果您不能增加主题的分区数量,那么可以使用一些“讨厌的”技巧。在两个接收器和pool()之后使用不同的消费者组id丢弃一个接收器上偏移量为偶数的消息和第二个接收器上偏移量为奇数的消息,如下所示:

  R1       R2
| 100      100 [X]
| 101 [X]  101
| 102      102 [X]
| 103 [X]  103
v 104      104 [X]

这会起作用,但会产生一些后果:

  • 它不可扩展(您无法轻松地将另一个接收器添加到分区)
  • 如果一个接收器卡住/死机,则第二个接收器无法处理其工作
  • 对不同消费群体的补偿管理相当困难(特别是如果生产者不在您的控制之下)
阳文轩
2023-03-14

不,你不能这么做。每个分区只能由单个消费者组中的一个消费者使用。

如果希望两个使用者使用同一分区,则这两个使用者必须属于两个不同的使用者组。但是,在这种情况下,两个使用者都将接收该分区的所有消息。

似乎您需要的是一个工作队列。2个工作线程使用单个队列中的消息,每个消息将仅由一个工作线程使用。有许多开源的工作队列,例如ActiveMQRabbitMQ,等等。

 类似资料:
  • 我的消费者并不是每次都能收到信息。我有3个代理(3个服务器)的Kafka集群,有3个主题和复制因子3的分区。 我有Java中的消费者,我将最大轮询记录设置在50000获取字节上,配置在50MB上。应用程序每分钟都进行轮询。当我向主题“my-topic”发送10条消息时,consumer不会给我所有的消息,而是只给我其中的一部分,其余的将在下一次运行中给我。消息是在applicatin睡眠期间由脚本

  • 使用Kafka作为微服务体系结构中的消息传递系统,我想知道哪一个是首选,是Spring Kafka,还是Spring Integration Kafka,为什么?还有,我们根据什么因素来决定选择哪一个?

  • 我有一个Spring启动应用程序,它使用来自 Kafka 集群中某个主题(例如 topic1)的消息。这就是我的代码目前的样子。 现在我想从另一个Kafka集群中的不同主题开始消费。一种方法是为此创建另一个bean。但是有更好的方法吗?

  • 问题内容: 我有一个MS Access数据库,我将需要创建一个SQL查询,该查询使我可以在保留所有值的同时,在一列中选择所有不同的条目。 在这种情况下,一个例子比以往任何时候都更有价值数千个单词: 表: SQL魔术 结果: 基本上,它删除列B的所有唯一值,但保留数据的多行。我可以“按b分组”,然后“计数> 1”以得到不同的字符,但是结果将只列出B的一行,而不是我需要的2或更多行。 有什么帮助吗?

  • 我正在使用一个库(ShareDB)进行操作转换,服务器端和客户端使用web套接字-json-流进行通信。然而,这个ShareDB是在nodejs上作为服务运行的(我使用Zorpc来控制我的节点进程),因为我的主要Web框架是Tornado(python)。我从这个线程中了解到,对于TCP等有状态协议,连接是由客户端端口区分的(因此只需要一个服务器端口)。根据这个关于web套接字如何处理多个传入请求

  • 有可能吗?如果是,使用消息并将消息发送到数据库的简单方式可能不安全。