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

gdrx4gfi  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(368)

我有一个由n个分区组成的主题。为了实现分布式处理,我创建了两个在不同机器上运行的进程。它们使用相同的groupd id订阅主题,并分配n/2个线程,每个线程处理单个流(每个进程有n/2个分区)。
这样我就可以实现负载分配,但是如果进程1崩溃,那么进程2就不能使用分配给进程1的分区中的消息,因为它在开始时只监听n/2个流。
或者,如果我为ha配置并在两个进程上启动n个线程/流,那么当一个节点失败时,所有分区都将由另一个节点处理。但是在这里,我们已经破坏了分发,因为所有分区一次将由一个节点处理。
有没有一种方法可以同时实现这两个目标?如何实现?

idv4meu8

idv4meu81#

是的,使用现有的流处理引擎。storm是一个很好的选择,spark和samza也是,这取决于您的用例。
现在您可以自己运行了,但正如您已经发现的,管理失败的流程和高可用性是很棘手的。一般来说,分布式处理充满了许多其他人已经解决的微妙问题。站在你的立场,我会用现有的软件来处理这个问题。

相关问题