【问题标题】:Multiple kafka producer threads getting spawn多个 kafka 生产者线程正在生成
【发布时间】:2023-02-21 09:20:15
【问题描述】:

我是卡夫卡的新手。我有两个卡夫卡经纪人,我正试图通过这两个经纪人推送数据。一个是主要的,另一个是备用的。

我正在做一个小分析,我正在通过线程池执行程序将数据推送到 kafka 队列。在这样做的同时,我将最大池大小保持为 1,并将数组阻塞队列的大小保持为 2。我通过 Jmeter 触发了 10 个请求,其中 7 个请求进入了拒绝处理程序(如预期的那样),3 个进入了 kafka 队列处理。

使用线程转储来分析 kafka 线程的状态,为 kafka 生产者启动了 4 个生产者线程。

我无法理解这一点,因为我正在使用两个代理,这里有 3 条消息正在通过 kafka 处理(阻塞队列中有 2 条,线程中有 1 条),那么 4 个生产者线程是如何启动的?

PS:出于安全考虑,我不能在这里分享代码片段。

【问题讨论】:

  • KafkaProducer 类是线程安全的,所以它只需要一个...您必须查看 jmeter 源代码以了解为什么使用更多

标签: java multithreading apache-kafka kafka-producer-api


【解决方案1】:

我无法理解这一点,因为我正在使用两个代理,这里有 3 条消息正在通过 kafka 处理(阻塞队列中有 2 条,线程中有 1 条),那么 4 个生产者线程是如何启动的?

我的总体感觉是您不必担心 Kafka API 使用了多少线程。线程相对便宜,Kafka 代码只是试图提高其通信效率。如果您有一个 Kafka Producer 对象,那么我很惊讶有 4 个线程,但它可能与每个代理建立连接,并且每个代理都有一个读写线程。查看每个线程的堆栈跟踪可能会提示您了解它们在做什么。您也可以看看Kafka code 可能也有帮助。

我通过 Jmeter 触发了 10 个请求,其中 7 个请求进入了拒绝处理程序(如预期的那样),3 个进入了 kafka 队列处理。

通常我会添加一个阻止的拒绝处理程序。参见my answer here。这将根据您的池中有多少线程来阻止您的请求处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2020-07-20
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多