2015-10-13 181 views
1

我在一个特定的主题中有多个消息(更具体地说是日志消息),这些消息具有相同的消息块ID(这些ID不断变化,但对于某个消息块保持不变),我需要找到一种组所有具有该ID的消息或共享消息组中所有消费者之间具有相同ID的消息中包含的数据。 那么有什么方法可以在消费者群体中的各种消费者之间共享数据?Kafka:消费者群体中的消费者可以共享数据吗?

回答

0

这听起来像是一个会话用例。 Kafka没有提供任何将消息分组或嵌套在一起的方法,因此您必须通过在处理消息的同时保持状态并使用某种标头来包装消息组来实现这一点。然后,您可以将其推送到包裹消息组的新主题。

更好的方法可能是利用外部数据库或其他系统,以更灵活的方式选择或组织基于字段的数据。有关使用Spark streaming + HBase的示例,您可以查看this blogpost

0

有两种方法可以做到这一点。

  1. 当您发布消息本身时,使用分区键创建一条消息,因此所有具有相同id的消息都转到单个分区。那么在消费方面,它总是会被接收者接收。[https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Producer+Example]

  2. 如果您使用的火花流在消费者方面,你可以使用滑动窗口的概念将所有相同的ID消息。[http://spark.apache.org/docs/latest/streaming-programming-guide.html#window-operations]