Kafka请求/响应消息的时间戳

4
我正在构建一个性能监控工具,它与Kafka主题一起在集群中运行。
例如,我正在监视两个主题:requestresponse。即我需要有两个时间戳 - 一个来自request,另一个来自response。然后,我可以计算差异以查看在接收请求并生成响应的服务中花费了多少时间。
请注意,它在群集上运行,因此不同的组件可能在不同的主机上运行,因此会存在不同的物理时钟,因此它们可能不同步,并且这将显着扭曲结果。
此外,我无法可靠地使用监视工具本身的时钟,因为这将通过其自身的处理时间影响计时结果。
因此,我想设计一种可靠地计算时间差异的方法。在Kafka中测量两个事件之间时间差异的最可靠方法是什么?

那么时间戳是由生成消息到“请求”和“响应”主题的应用程序设置的吗?还是您正在使用Kafka消息本身的时间戳?当您谈论测量两个事件之间的时间时,您如何定义事件的时间? - Robin Moffatt
@RobinMoffatt 事件由不同的应用程序产生。例如,应用程序A发送请求,应用程序B对其进行响应,监控工具监听这两个事件以找到差异。因此,我想测量应用程序B的速度。 "事件时间" - 是的,我不确定。我想最好的定义是应用程序B能够消耗“请求”事件的时间与它使“响应”可供其他人使用之间的差异。在这种情况下,我想这可能是Kafka Broker的时间戳。 - kan
您可以将 log.message.timestamp.type 设置为 LogAppendTime,以在记录中使用代理时间戳。然后,您可以找到请求和响应之间的时间差。 - Kamal Chandraprakash
@KamalChandraprakash 如何确保“请求”和“响应”主题使用相同的物理时钟?我理解Kafka可能在集群的几个节点上运行... - kan
1个回答

0

解决方案1

我们之前有类似的问题,解决方法是设置 NTP(网络时间协议)。

在这种情况下,您的一个节点充当NTP服务器并运行守护程序以在所有节点之间保持时间同步,我们保持UTC,所有其他节点都具有NTP客户端,可以在所有服务器上保持相同的时间。

解决方案2:

为所有组件构建一个通用时钟API,提供当前时间。这将使您的系统设计独立于节点本地时钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接