获取kafka消息处理时间

Get kafka message processing time

我有 2 个服务:生产者和消费者。

据我了解,message.ts生产者产生消息的时间(不是 kafka-broker 收到消息的时间。

问题

  1. 消费者消费消息时,我怎么知道它在kafka-broker中有多少时间(没有网络延迟:从生产者到kafka-broker 和从 kafka-broker 到消费者)?

  2. 我从我的消费者虚拟机对 kafka 代理执行了 ping 操作。 ping 结果是 0.7ms(毫秒)。从每一方到kafka代理的网络延迟是否为0.3ms?我假设 kafka transport 是 TCP 所以所有东西都有一个“ACK”消息。而且我假设如果没有“ACK”,每一方都不会做任何事情,所以我得出结论,每个大小的网络延迟与 ping 结果相同:0.7ms(毫秒)。 我说的对吗?

比那要复杂一点。许多变量会影响处理消息所需的时间。我建议您研究分布式跟踪。类似于 Zipkin works like magic and is very easy to setup and use. Here's a tutorial on how to setup Zipkin tracing with Spring Boot. You can even use it with Kafka Connect with an interceptor, here's the one I use: brave-kafka-interceptor.

Zipkin 为每条消息生成一个跟踪,包括处理它的所有生产者和消费者。这些痕迹最终看起来像这样:

你可以看到一条消息处理了多少时间,消息产生后消耗了多少时间,这就是你要找的。

我通过从同一个虚拟机生产和消费到卡夫卡(在我的集群内)来手动测试这个。结果是 1.3-1.5 毫秒。

表示处理时间平均为0.1毫秒。

  • 我每 1 秒产生一条新消息以避免消费时的延迟。

这不是最好的解决方案,但足以满足我的研究。