[英]Kafkajs - get statistics (lag)
在我們的nest.js
應用程序中,我們為kafka 使用kafkajs客戶端。 我們需要獲得機會監控統計數據。 指標之一是lag
。
試圖弄清楚kafkajs是否提供任何有趣的東西。 (payload中最有趣的是: timestamp
、 offset
、 batchContext.firstOffset
、 batchContext.firstTimestamp
、 batchContext.maxTimestamp
)
有什么想法可以記錄kafkajs
提供的lag
值和其他統計信息嗎?
我是否應該考慮實現自己的統計監視器來收集使用kafka.js
客戶端的節點應用程序中的所需信息?
按照文檔,我可以獲得batch.highWatermark
,其中
batch.highWatermark
是主題分區中最后提交的偏移量。 它可用於計算滯后。
試
await consumer.run({
eachBatchAutoResolve: true,
eachBatch: async (data) => {
console.log('Received data.batch.messages: ', data.batch.messages)
console.log('Received data.batch.highWatermark: ', data.batch.highWatermark)
},
})
我可以得到像下一個這樣的信息:
Received data.batch.messages: [
{
magicByte: 2,
attributes: 0,
timestamp: '1628877419958',
offset: '144',
key: null,
value: <Buffer 68 65 6c 6c 6f 21>,
headers: {},
isControlRecord: false,
batchContext: {
firstOffset: '144',
firstTimestamp: '1628877419958',
partitionLeaderEpoch: 0,
inTransaction: false,
isControlBatch: false,
lastOffsetDelta: 2,
producerId: '-1',
producerEpoch: 0,
firstSequence: 0,
maxTimestamp: '1628877419958',
timestampType: 0,
magicByte: 2
}
},
{
magicByte: 2,
attributes: 0,
timestamp: '1628877419958',
offset: '145',
key: null,
value: <Buffer 6f 74 68 65 72 20 6d 65 73 73 61 67 65>,
headers: {},
isControlRecord: false,
batchContext: {
firstOffset: '144',
firstTimestamp: '1628877419958',
partitionLeaderEpoch: 0,
inTransaction: false,
isControlBatch: false,
lastOffsetDelta: 2,
producerId: '-1',
producerEpoch: 0,
firstSequence: 0,
maxTimestamp: '1628877419958',
timestampType: 0,
magicByte: 2
}
},
{
magicByte: 2,
attributes: 0,
timestamp: '1628877419958',
offset: '146',
key: null,
value: <Buffer 6d 6f 72 65 20 6d 65 73 73 61 67 65 73>,
headers: {},
isControlRecord: false,
batchContext: {
firstOffset: '144',
firstTimestamp: '1628877419958',
partitionLeaderEpoch: 0,
inTransaction: false,
isControlBatch: false,
lastOffsetDelta: 2,
producerId: '-1',
producerEpoch: 0,
firstSequence: 0,
maxTimestamp: '1628877419958',
timestampType: 0,
magicByte: 2
}
}
]
Received data.batch.highWatermark: 147
那么有什么想法可以在標簽計算中使用batch.highWatermark
嗎?
看起來獲得偏移滯后指標的唯一方法是使用檢測事件:
consumer.on(consumer.events.END_BATCH_PROCESS, (payload) =>
console.log(payload.offsetLagLow),
);
offsetLagLow
測量批處理中的第一條消息與分區中的最后一個偏移量 ( highWatermark
) 之間的偏移量增量。 您也可以使用offsetLag
,但它基於批次的最后一個偏移量。
正如@Sergii 提到的,當您使用eachBatch
時,可以直接使用一些道具( 這里是batch
道具上的所有可用方法)。 但是,如果您使用eachMessage
,您將無法獲得該道具。 因此,儀表事件是最通用的方法。
一般來說,描述的配置可以正常工作。 附加配置損壞的工作,使用eachMessage
屬性,如:
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log({
key: message.key.toString(),
value: message.value.toString(),
headers: message.headers,
})
},
})
所以同時消費者配置應該只配置一個屬性eachBatch
或eachMessage
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.