【发布时间】:2015-10-11 09:20:09
【问题描述】:
假设消费者进行时间密集型处理。为了扩展消费者端处理,我想以循环方式从 kafka 主题生成多个消费者和消费者消息。根据文档,如果我创建多个消费者并将它们添加到一个消费者组中,似乎只有一个消费者会收到消息。如果我将消费者添加到不同的消费者组,每个消费者都会收到相同的消息。那么,为了达到上述目的,唯一的解决方案是对主题进行分区吗?这似乎是一个奇怪的设计选择,因为消费者可扩展性现在正在渗透到主题甚至生产者设计中。理想情况下,如果主题不分区,则不需要对其进行分区。这给生产者带来了不必要的逻辑,也导致其他消费者类型从这些分区中消费,这可能只对一种类型的消费者有意义。此外,它还限制了用例,在这种情况下,某种消费者类型可能希望对消息进行排序,因此可能无法将主题拆分为分区。
其次,如果我选择“cleanup.policy”进行压缩,是否意味着 kafka 日志会不断增加,因为它将保持每个键的最新值?如果没有,我怎样才能获得日志删除和压缩?
更新: 似乎我有两种选择可以在消费者端实现可扩展性,它们独立于主题扩展。
创建消费者组并让他们消费奇数和偶数偏移量。这个逻辑必须内置到消费者中以丢弃不需要的消息。网络需求也翻倍
创建主题层次结构,其中根主题获取所有消息。然后一些工作对日志进行分类并将它们再次发布到更细粒度的主题。在这种情况下,可以在根上实现强排序,并且可以构建更细粒度的消费者扩展主题。
在 0.8 中,kafka 维护了消费者偏移量,因此在各个消费者之间循环发布消息对于他们的设计来说并不是一个太牵强的要求。
【问题讨论】:
标签: apache-kafka