Java 卡夫卡-将消息分配给特定的消费群体
我有一个关于Kafka组ID的小问题,我可以在Java中使用以下注释:Java 卡夫卡-将消息分配给特定的消费群体,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我有一个关于Kafka组ID的小问题,我可以在Java中使用以下注释: @KafkaListener(topics = "insert", groupId = "user") 在那里,我可以设置一个它想要使用的groupId,但我不会只使用这个组id,可能是因为我不能发送到特定的组id。我如何只发送到一个特殊的groupId?关于我可以使用GroupID的内容,或者我需要设置发送卡夫卡消息的特定主题 我已经试着在网上找到答案了,但是我什么也没找到
@KafkaListener(topics = "insert", groupId = "user")
在那里,我可以设置一个它想要使用的groupId,但我不会只使用这个组id,可能是因为我不能发送到特定的组id。我如何只发送到一个特殊的groupId?关于我可以使用GroupID的内容,或者我需要设置发送卡夫卡消息的特定主题
我已经试着在网上找到答案了,但是我什么也没找到,也许我用的是google false哈哈
我希望所有人都能理解我,如果不是,请提问:)
已经有很多了 欢迎来到卡夫卡!首先:你不能发送到消费群体,你只能发送到
主题
下面的文字太多。阅读整个答案时,请注意可能出现的睡意。
如果你还在读这篇文章,我想你真的想知道如何将信息发送给特定的客户,或者你真的需要尽快睡一觉。 也许两者都有。以后不要开车
回到你的问题。 从该主题中,多个
消费群体可以阅读。每个CG
都是独立的,因此每个人都会自始至终地阅读主题。把一个CG
想象成一个内恐惧症消费者的联盟:他们不会关心其他群体,他们不会与其他群体交谈,他们甚至不知道是否存在其他群体
通过使用不同的方法和/或体系结构,我可以想出三种不同的方法来实现您的目标。唯一使用消费群体的是第一个,但其他两个也可能有用:
订阅
分配
- 多主题
前两个基于在单个主题中划分消息的机制。第三种方法只能在某些情况下成立。让我们进入这些选项
1.
您可以创建一个新主题,用消息填充它,并添加一些元数据,以便识别谁需要处理每条消息(该消息指向谁)
存储在卡夫卡中的消息除其他字段外,还包含一个键
和一个值
(消息本身)
假设您只希望GROUP-A
处理一些特定的消息。一个简单的解决方案是在键上包含一个标识符,例如后缀。其中一个键可能看起来像:键#GA
在消费者方面,您可以poll()
从该主题中获取消息,并在处理之前添加一点额外的条件逻辑:您只需读取密钥并检查后缀。如果它与指定的消费者组对应,在这种情况下,它包含GA
,则A组的消费者知道它必须处理该消息
例如,您的主题存储两种不同性质的消息,您希望将它们定向到两个组:GROUP-A
和GROUP-Z
key value
- [11#GA][MESSAGE]
- [21#GZ][MESSAGE]
- [33#GZ][MESSAGE]
- [44#GA][MESSAGE]
两个消费群体都会对这4条消息进行投票,但每个群体只会处理其中的一些消息
A组将丢弃第2条和第3条消息它将处理第1个和第4个。
Group-Z
将丢弃第一条和第四条消息它将处理第二个和第三个。
这基本上是你的目标,但使用一些额外的逻辑和玩卡夫卡的架构。带有特定后缀的消息将被“定向到”特定的消费者群体,并被其他消费者群体忽略
2.
上述解决方案的重点是消费者群体和卡夫卡的subscribe
方法。另一种可能的解决方案是使用卡夫卡的assign
方法,而不是订阅消费群体。此处不涉及ConsumerGroup
,因此将引用前面的组以避免任何混淆
Assign
允许您直接指定消费者必须阅读的主题/分区
在生产者端,您应该使用自己的逻辑对消息进行分区,以便在主题内的分区之间进行分区。一些关于自定义分区的更深入的信息(是的,链接中的作者看起来像一个彻底的傻瓜)
例如,假设您有5种不同类型的消费者。因此,您创建了一个主题
,其中包含5个分区,每个“组”对应一个分区。您的生产者
的自定义分区器为每条消息标识相应的分区,本主题将在生成上一示例中的消息后呈现此结构:
为了将消息定向到相应的“组”:
“Group-Z”
被分配到第五个分区
“A组”
被分配了第一个分区
此解决方案的优点是浪费的资源更少:每个“组”只轮询自己的消息,当验证每个消息都指向轮询它的消费者时,您可以避免丢弃/接受逻辑:线路上的通信量更少,内存中的对象更少,cpu工作更少
disadvatange包含一个更复杂的卡夫卡制作人机制,该机制涉及一个自定义的分区器,该分区器应该根据数据或主题结构的变化不断更新。此外,这还将导致在每次更改生产方时更新您的消费者定义的分配
体育