簡體   English   中英

Kafkajs - 獲取統計信息(滯后)

[英]Kafkajs - get statistics (lag)

在我們的nest.js應用程序中,我們為kafka 使用kafkajs客戶端。 我們需要獲得機會監控統計數據。 指標之一是lag

試圖弄清楚kafkajs是否提供任何有趣的東西。 (payload中最有趣的是: timestampoffsetbatchContext.firstOffsetbatchContext.firstTimestampbatchContext.maxTimestamp

問題

有什么想法可以記錄kafkajs提供的lag值和其他統計信息嗎?

我是否應該考慮實現自己的統計監視器來收集使用kafka.js客戶端的節點應用程序中的所需信息?

新細節 1

按照文檔,我可以獲得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,
        })
    },
})

所以同時消費者配置應該只配置一個屬性eachBatcheachMessage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM