当前位置:  开发笔记 > 前端 > 正文

Kafka Streaming Concurrency?

如何解决《KafkaStreamingConcurrency?》经验,为你挑选了2个好方法。

我有一些基本的Kafka Streaming代码,它从一个主题读取记录,进行一些处理,并将记录输出到另一个主题.

Kafka流如何处理并发?一切都在一个线程中运行吗?我没有在文档中看到这一点.

如果它是单线程的,我希望多线程处理的选项能够处理大量数据.

如果它是多线程的,我需要了解它是如何工作的以及如何处理资源,比如SQL数据库连接应该在不同的处理线程中共享.

相对于其他选项(Spark,Akka,Samza,Storm等),Kafka的内置流API是否不推荐用于高容量场景?



1> Michael G. N..:

Kafka流如何处理并发?一切都在一个线程中运行吗?我没有在文档中看到这一点.

这在http://docs.confluent.io/current/streams/architecture.html#parallelism-model中有详细记录.我不想在此逐字复制粘贴,但我想强调IMHO要理解的关键元素是分区(参见Kafka的主题分区,在Kafka Streams中将其推广为"流分区"并非全部正在处理的数据流将通过Kafka)因为分区当前决定了Kafka(代理/服务器端)和使用Kafka Streams API(客户端)的流处理应用程序的并行性.

如果它是单线程的,我希望多线程处理的选项能够处理大量数据.

处理分区将始终只由一个"线程"完成,这可确保您不会遇到并发问题.但...

如果它是多线程的,我需要了解它是如何工作的以及如何处理资源,比如SQL数据库连接应该在不同的处理线程中共享.

...因为Kafka允许主题有许多分区,所以你得到并行处理.例如,如果一个主题有100个分区,那么最多100个流任务(或者,有些过于简化:每个运行应用程序实例的多达100个不同的机器)可以并行处理该主题.同样,每个流任务都将获得对1分区的独占访问权,然后它将处理该分区.

相对于其他选项(Spark,Akka,Samza,Storm等),Kafka的内置流API是否不推荐用于高容量场景?

肯定推荐使用Kafka的流处理引擎,实际上也可以在高容量场景中使用它.关于比较基准测试的工作仍在进行中,但在许多情况下,基于Kafka Streams的应用程序变得更快.请参阅LINE工程师的博客:将LINE Kafka Streams应用于内部消息传递管道,以获取LINE Corp(亚洲最大的社交平台之一(220M +用户))的文章,其中描述了他们如何在生产中使用Kafka和Kafka Streams API进行处理每秒数百万个事件.


同时,指向LINE工程师博客的链接已断开。您可以在这里找到它:https://engineering.linecorp.com/en/blog/detail/80

2> Nicholas..:

kstreams config num.stream.threads 允许您覆盖1中的线程数.但是,最好只运行流应用程序的多个实例,所有实例都运行相同的使用者组.这样,您可以根据需要调整尽可能多的实例以获得最佳分区.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有