提高Kafka制作人的绩效

pn9klfpd  于 2021-06-08  发布在  Kafka
关注(0)|答案(3)|浏览(266)

我们运行的是ApacheKafka 0.10.0.x和Spring3.x,不能使用SpringKafka,因为SpringFramework版本4.x支持它。
因此,我们使用本机kafka producer api来生成消息。
现在我关心的是我的制片人的表现。问题是我相信 producer.send 是什么真正建立到kafka代理的连接,然后将消息放入缓冲区,然后尝试发送并可能调用 producer.send() .
现在kafkaproducer文档说它使用一个缓冲区和另一个i/o线程来执行发送,并且应该适当地关闭它们,这样就不会出现资源泄漏。
据我所知,这意味着如果每次调用 producer.send() 它试图连接到代理,这是一个昂贵的i/o操作。
如果我错了,你能纠正我的理解吗?或者你能建议一个更好的使用Kafka的方法吗?

fbcarpbf

fbcarpbf1#

你的理解部分正确。
正如@leshkin所指出的,有一些配置参数可以调整kafkaproducer如何处理要发送的消息的缓冲。
但是,独立于缓冲策略,生产者将负责缓存到主题引导代理的已建立连接。
实际上,您可以使用 connections.max.idle.ms 参数(默认为9分钟)。
因此,为了回答您最初的问题,与代理建立连接的i/o成本只发生在第一个阶段 send 只要您有数据要发送,调用和将随时间摊销。

jc3wubiy

jc3wubiy2#

kafka producer的两个重要配置参数是'batch.size'和'linger.ms'。因此,您基本上有一个选择:您可以等到生产商批次已满,或者生产商超时。
batch.size–这是kafka producer在发送前尝试批处理的消息数的上限–以字节为单位指定。
linger.ms–生产者在发送之前要等待多长时间,以便在同一批中累积更多的消息。
这取决于您的用例,但我建议您仔细研究一下这些参数。

hjzp0vay

hjzp0vay3#

在以下情况下,您需要在kafka prodocer中配置batch.size、linger.ms和compression.type属性以提高性能。
1) 如果唱片到达的速度比Kafka制作人发送的速度快。
2) 如果你有大量的数据在你各自的主题,它真的负担你的Kafka生产者。
3) 如果你有瓶颈

batch.size = 16_384 * 4
 linger.ms 200
compression.type = "snappy"

props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16_384 * 4);
    // Send with little bit buffering
    props.put(ProducerConfig.LINGER_MS_CONFIG, 200);    
  //Use Snappy compression for batch compression.
    props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "snappy");

Kafka·佐内
性能调优
Kafka表演

相关问题