我有一系列事件可以按类型和每小时时间戳进行分类。我最初的想法是在Kafka将事件分成不同的主题(一个类别)。但是,最终可能会有数百个主题。另外,如果它们没有正确清理(在我的情况下动态编程[1]),系统可能会留下数千个。从我阅读的内容[2]来看,这似乎会导致Zookeeper出现大量开销。
我的第二个想法是将事件流式传输到一个主题并创建多个消费者。它的缺点是浪费带宽,因为每个消费者都必须通过所有事件来查找其感兴趣的内容。
另一种方法是结合我的第一种和第二种方法并找到权衡。即创建一个包含多个分区的主题;某些类别的事件会进入同一分区。
我想知道在这种情况下理智的方法是什么。
-
答案 0 :(得分:3)
我认为最好的策略是为每个语义不同的数据流创建一个主题,并在需要更多并行性时对其进行分区。通过这种方式,您可以轻松地将每个消费者设置为从相应主题中读取,并且添加新分区是微不足道的,因为消费者将自动开始使用新分区。
正如您所建议的那样,也可以根据事件的类别对数据进行分区,并将消费者组设置为从所有事件中读取,但是当您想要添加更多分区(或更多消费者)时,这可能会产生问题,因为您可能需要修改使用者和分区之间的映射。同时增加并行性也变得更加复杂。
我建议你最初不要担心动物园管理员的表现,并从最自然的方法开始。 Kafka通常可以处理大量主题而无需太多开销。