如何解决如何减少卡夫卡生产者和消费者之间的延迟?
我正在使用带有弹簧靴的kafka。我阅读了许多有关kafka调整的文章,并在生产者和消费者方面进行了一些配置更改。
但卡夫卡仍然花了1.10秒才能从生产者到消费者传达一条信息。按照kafka的说法,kafka的编程能力很好,可以实现高延迟,但是我却无法实现。
ProducerConfig:
@Bean
public Map<String,Object> producerConfigs() {
Map<String,Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class);
props.put(ProducerConfig.BATCH_SIZE_CONFIG,20000);
props.put(ProducerConfig.LINGER_MS_CONFIG,1000);
return props;
}
ConsumerConfig
@Bean
public Map<String,Object> consumerConfigs() {
Map<String,Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringDeserializer.class);
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest");
props.put(ConsumerConfig.RECEIVE_BUFFER_CONFIG,502400);
return props;
}
我要描述的一些要点:
- 生产者:对于低延迟,Batch.size和liner.ms对生产者配置至关重要。尝试设置为最大值。
- 消费者:要获得高吞吐量,需要增加缓冲区大小。
我进行了这两个更改,但仍然无法实现卡夫卡的预期。
- 如何使用kafka实现高延迟?生产者和消费者中是否有任何特定的配置?
任何建议都会对我有所帮助。
解决方法
Confluent在Optimizing your Kafka Deployment上有一篇不错的白皮书,其中详细说明了如何优化配置,
- 等待时间
- 吞吐量
- 耐久性
- 可用性
您对减少延迟感兴趣。您当前的配置可能会导致高延迟,因为linger.ms
设置为1000(1秒)。另外,batch.size
是“非常高”的,这可能导致至少1秒的延迟(来自linger.ms)。
要减少延迟,您可以通过设置linger.ms=0
强制生产者无延迟地发送消息,而不论消息大小如何。
总体而言,白皮书提出了以下建议,这也是我在实践中所获得的建议,并且可以给予大力支持:
制作人:
-
linger.ms=0
-
compression.type=none
-
acks=1
消费者:
-
fetch.min.bytes=1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。