在我们的架构中,我们假设在一台机器上运行三个jvm进程(大约),并且每台jvm机器最多可以承载15个kafka流应用程序。
如果我没有错的话,每个kafka流应用程序都会产生一个java线程。因此,这似乎是一个尴尬的架构,有大约45Kafka流应用程序运行在一台机器上。
所以,我有三个问题
1) 我的理解是正确的,每个Kafka流应用程序产生一个java线程?另外,每个kafka流都会启动一个与kafka代理的新tcp连接?
2) 有没有办法为多个kafka流共享一个tcp连接?
3) 在一台机器上运行45个流是否困难(不推荐)?答案肯定是否定的,除非在生产中有真正的用例。
2条答案
按热度按时间u1ehiz5o1#
每个kafka流作业生成一个线程。如果线程数设置为n个数,它将在处理n个数时提供并行性
Kafka的分区。
如果一台机器没有能力运行大量线程,那么可以通过提交流来实现并行性
应用程序在同一集群中的另一台计算机中使用相同应用程序名称的作业。这项工作将由Kafka确定
流和后台处理。
在一台机器上运行45个流是否困难(不推荐)?答案肯定是否定的,除非在生产中有一个真正的用例。--除非你的系统有这么多内核或者输入有45个分区,否则这是不必要的
643ylb082#
多个答案:
默认情况下,kafkastreams示例启动一个处理线程(您也可以配置更多的处理线程)
在内部,kafkastreams使用两个kafkaconsumer和一个kafkaproducer(如果打开eos,它使用更多的kafkaproducer):一个kafkaconsumer启动后台心跳线程,一个kafkaproducer启动后台发送器线程=>您总共得到4个线程(processing,2xheartbeat,sender)--如果您配置两个processing线程,最后总共有8个线程,以此类推)
当使用者和生产者(以及还原使用者,如果启用备用任务)连接到集群时,存在多个tcp连接
不可能共享任何tpc连接atm(这需要对消费者和生产者进行重写)
有多少线程可以高效运行取决于您的硬件和工作负载。。。监测你的cpu利用率,看看你的机器是如何。。。