【问题标题】:How to bind message types to Kafka consumers on a single consumer group?如何将消息类型绑定到单个消费者组上的 Kafka 消费者?
【发布时间】:2019-10-23 20:07:57
【问题描述】:

我有一个制作人producer,他想将some_persistent_message 发送给dbConsumersome_Notification_message 发送给notificationConsumer

Producer1 正在发送带有密钥的消息

db_key: some_persistent_message

notify_key:some_Notifiction_message

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

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

是否可以将some_persistent_message 发送到dbConsumersome_Notification_messagenotification_consumer

【问题讨论】:

  • 您具体了解这些分区吗?还是消费者?
  • 为什么不使用不同的主题和不同的消费群体呢?一个应用可以有多个生产者
  • @cricket_007 即使不需要多个生产者,一个 kafkaproducer 对象也可以生产多个主题。

标签: apache-kafka kafka-consumer-api


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    拥有两个不同的消费者组假设每种类型的消息数量大致相同,否则可能会浪费大量 CPU。如果一种消息类型比另一种更频繁地出现几个数量级,则最好将两个消费者合并为一个带有分支的消费者以执行适当的处​​理。

    消息数量大不相同也可能会干扰两个不同消费者组按时间顺序处理这两种类型的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2016-12-27
      • 2017-01-04
      相关资源
      最近更新 更多