如何将消息类型绑定到单个消费者组上的Kafka消费者?

时间:2019-06-08 18:40:07

标签: apache-kafka kafka-consumer-api

我有一个制作人producer,他想将some_persistent_message发送到dbConsumer,并且将some_Notification_message发送到notificationConsumer

Producer1通过按键发送消息

db_key: some_persistent_message

notify_key:some_Notifiction_message

在消费者方面,我有一个消费者组App1_group,其中有两个消费者dbConsumernotificationConsumer

enter image description here

在这个时间点上,我的dbConsumer总是收到some_Notification_message的消息,因为我的消费者最终拥有一个特定的分区,该分区总是得到notify_key:some_Notifiction_message

是否可以将some_persistent_message发送到dbConsumer 和从some_Notification_messagenotification_consumer

2 个答案:

答案 0 :(得分:1)

如果您必须在一个主题中混合使用多种消息类型(例如,以保持消息的时间顺序),那么我建议您使用一个过载的消息类型,它可以代表您不同的消息类型,并且可以能够回答其所持有的信息。然后为每种消息类型和相关的处理逻辑设置一个单独的使用者组。最后,修改每个使用者中的逻辑以仅处理适当的消息。

拥有两个不同的使用者组假定每种类型的消息数量大致相同,否则可能会浪费大量CPU。如果一种消息类型出现的频率比另一种消息出现的频率高几个数量级,那么最好将两个使用者合并到一个具有分支的单一使用者中,以执行适当的处​​理。

大量不同的消息还会干扰按时间顺序处理两个不同的消费者组的两种消息。

答案 1 :(得分:0)

最好的方法是简单地使用KafkaConsumer#assign()并指定适当的分区。

或者,如果您可以使用两倍的I / O,则只需使用两个使用者组-两个使用者都将获得所有消息,并且在您的使用者逻辑中,您可以简单地跳过不需要的类型的消息。

相关问题