我正在使用带有弹簧靴的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;
}
我要描述的一些要点:
我进行了这两个更改,但仍然无法实现卡夫卡的预期。
任何建议都会对我有所帮助。
答案 0 :(得分:2)
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