我是新的Kafka。我有两个Kafka经纪人,我试图推动数据通过这两个经纪人。一个是主要的,另一个是备份。
我正在做一个小的分析,通过一个线程池执行器将数据推送到Kafka队列中,同时保持最大池大小为1,数组阻塞队列的大小为2,通过Jmeter触发了10个请求,其中7个请求进入拒绝处理程序(如预期),3个请求进入kafka队列处理。
进行线程转储以分析Kafka线程的状态,为kafka producer启动了4个生产者线程。
我无法理解这一点,因为我使用了两个代理,这里有3条消息通过Kafka处理(2条在阻塞队列中,1条在线程中),那么4个生产者线程是如何旋转起来的?
PS:出于安全考虑,我不能在这里分享代码.
1条答案
按热度按时间yqkkidmi1#
我无法理解这一点,因为我使用了两个代理,这里有3条消息通过kafka处理(2条在阻塞队列中,1条在线程中),那么4个生产者线程是如何旋转起来的?
我总的感觉是你不应该担心Kafka API使用了多少线程。线程相对便宜,Kafka代码只是试图提高通信效率。如果你有一个Kafka Producer对象,那么我很惊讶有4个线程,但它可能会连接到每个代理,并可能有一个读写线程。查看每个线程的堆栈跟踪可能会提示您它们正在做什么。您还可以查看Kafka code也可能会有所帮助。
我通过Jmeter触发了10个请求,其中7个请求进入拒绝处理程序(如预期),3个请求进入Kafka队列处理。
通常我会添加一个阻塞的拒绝处理程序,参见my answer here,这将根据池中线程的数量阻塞请求处理程序。