我想从Kafka主题中获得一些统计数据:
我是否可以安全地假设,在给定的时间戳下(使用getOffsetsByTimes
读取主题中每个分区的偏移量,应该可以得到在该特定时间内写入的消息数?
我可以求和每个分区的所有偏移量,然后计算时间戳1和时间戳2之间的差。有了这些数据,我应该能够计算出很多统计信息。
在某些情况下,这些数据可能给我带来错误的结果?我不需要100%的精度,但是我希望有一个可靠的解决方案。当然,假设该主题未删除/重置。
还有其他不使用第三方工具的选择吗? (我无法轻松安装其他工具,并且我的应用程序中需要数据)
答案 0 :(得分:2)
(使用getOffsetsByTimes)应该给我特定时间写入的消息数量?
在 Kafka:权威指南中,它提到getOffsetsByTime
不是基于消息的,而是基于段文件的。这意味着时间索引查找不会读入段文件中,而是获取包含您感兴趣的时间的第一个段。(自本书发行以来,在较新的Kafka发行版中可能已更改)
如果您不需要准确性,那应该没问题。请注意,压缩的主题没有一个接一个的顺序偏移,因此,简单的abs(offset@time2 - offset@time1)
对于“主题中的现有消息总数”将不起作用。
否则,代理会公开很多JMX指标,例如字节入和消息速率,例如,您可以使用Grafana对其进行汇总和绘制。