如何在Kafka中同时实现分布式处理和高可用性?

时间:2015-05-05 18:10:56

标签: message-queue scalability apache-kafka high-availability kafka-consumer-api

我有一个由n个分区组成的主题。要进行分布式处理,我创建了在不同机器上运行的两个进程他们订阅具有相同groupd id的主题并分配n / 2个线程,每个线程处理单个流(每个进程n / 2个分区)。

有了这个,我将实现负载分配,但现在如果进程1崩溃,则进程2不能消耗分配给进程1的分区的消息,因为它在开始时仅在n / 2个流上进行侦听。

否则,如果我配置HA并在两个进程上启动n个线程/流,那么当一个节点发生故障时,其他节点将处理所有分区。但是在这里,我们已经破坏了分发,因为所有分区一次只能由一个节点处理。

有没有办法同时实现这两种方式?

1 个答案:

答案 0 :(得分:2)

是的,使用现有的流处理引擎。 Storm是一个不错的选择,SparkSamza也是一个不错的选择,取决于您的使用案例。

现在您可以自己动手,但正如您已经发现的那样,管理失败的流程和高可用性非常棘手。一般来说,分布式处理充满了许多微妙的问题,其他人已经解决了。在你的鞋子里,我会使用现有的软件来处理这个问题。