我在某个主题中有多条消息(更具体地说是日志消息),这些消息对于一个消息块具有相同的id(这些id不断变化但对于某个消息块保持相同)并且我需要找到一种方法来对具有该ID的所有消息进行分组,或者在消费者组中的所有消费者之间共享具有相同ID的那些消息中包含的数据。 那么,我是否可以在消费者群体中的各种消费者之间共享数据?
答案 0 :(得分:0)
这听起来像是一个会话化用例。 Kafka没有提供任何将消息分组或嵌套在一起的方法,所以你必须通过在处理消费者时保持状态并用一些标题包装消息组来自己做。然后,您可以将其推送到包装消息组的新主题。
更好的方法可能是利用外部数据库或其他系统,使用更灵活的方法根据字段选择或组织数据。您可以使用Spark streaming + HBase查看this blogpost示例。
答案 1 :(得分:0)
有两种方法可以做到。
当您发布消息本身时,使用分区键创建消息,因此具有相同ID的所有消息都将转到单个分区。然后在消费者方面,它将始终由单个消费者消费。[https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Producer+Example]
如果您在消费者方面使用Spark-streaming,则可以使用滑动窗口概念对所有相同的ID消息进行分组。[http://spark.apache.org/docs/latest/streaming-programming-guide.html#window-operations]