我有一个制作人producer
,他想将some_persistent_message
发送到dbConsumer
,并且将some_Notification_message
发送到notificationConsumer
Producer1
通过按键发送消息
db_key: some_persistent_message
notify_key:some_Notifiction_message
在消费者方面,我有一个消费者组App1_group
,其中有两个消费者dbConsumer
和notificationConsumer
在这个时间点上,我的dbConsumer
总是收到some_Notification_message
的消息,因为我的消费者最终拥有一个特定的分区,该分区总是得到notify_key:some_Notifiction_message
是否可以将some_persistent_message
发送到dbConsumer
和从some_Notification_message
到notification_consumer
?
答案 0 :(得分:1)
如果您必须在一个主题中混合使用多种消息类型(例如,以保持消息的时间顺序),那么我建议您使用一个过载的消息类型,它可以代表您不同的消息类型,并且可以能够回答其所持有的信息。然后为每种消息类型和相关的处理逻辑设置一个单独的使用者组。最后,修改每个使用者中的逻辑以仅处理适当的消息。
拥有两个不同的使用者组假定每种类型的消息数量大致相同,否则可能会浪费大量CPU。如果一种消息类型出现的频率比另一种消息出现的频率高几个数量级,那么最好将两个使用者合并到一个具有分支的单一使用者中,以执行适当的处理。
大量不同的消息还会干扰按时间顺序处理两个不同的消费者组的两种消息。
答案 1 :(得分:0)
最好的方法是简单地使用KafkaConsumer#assign()并指定适当的分区。
或者,如果您可以使用两倍的I / O,则只需使用两个使用者组-两个使用者都将获得所有消息,并且在您的使用者逻辑中,您可以简单地跳过不需要的类型的消息。