前言
在线业务诸如欺诈检测、支付系统和股票交易平台等场景,要求Kafka数据高效可靠地传输。本文详细剖析Kafka数据传输端到端延迟的内容、在保证延迟指标的同时,通过配置和扩展业务程序获得更高吞吐量。
端到端延迟详解
简单概述地说,端到端延迟就是从业务程序KafkaProducer.send()开始发送消息到业务程序KafkaConsumer.poll()读取到消息的耗时。如图描述详细的端到端延迟构成:

Produce time:Kafka producer批量缓存消息的耗时Publish time:Kafka producer发送消息到leader的耗时Commit time:follower从leader复制消息的耗时Catch-up time:kafka consumer顺序消费追赶到消息的耗时Fetch time:Kafka consumer读取到消息的耗时
业务程序使用Kafka客户端的方法及具体配置通常影响端到端,了解每个阶段的耗时情况很有必要。本文后续详细解释每个阶段耗时的具体情况。
Produce time详解
Publish time详解
定义:从携带消息的producer请求开始发送到leader将消息写入Log的时间。network线程从TCP连接中拿producer请求将其放入到请求队列,handler线程从请求队列拿producer请求进行处理。具体包括如下:
1. 网络耗时:producer请求网络传输的时间
2. 排队耗时:producer请求在请求队列中等待的时间
3. 处理耗时:将producer请求中的消息写log的时间(系统内存充足,就是写page cache的时间)。当broker负载较轻时,网络耗时和处理耗时对publish time影响更大;当broker负载较重时,排队耗时对push time影响更大。
Catch-up time详解

Fetch time详解
定义:consumer 通过KafkaConsumer.poll()持续从leader poll消息,为了等待足够的消息量,会设置等待时间。可以通过设置fetch.min.bytes和fetch.max.wait.ms调整。
总结
至此,kafka数据的端到端延迟的详细内容阐述完成。对于低延迟需求的kafka数据传输的调优提供思路!




