Kafka:用node-rdkafka读取__consumer_offsets

时间:2018-02-27 19:49:56

标签: javascript node.js apache-kafka

有没有办法使用javascript解码主题__consumer_offsets中的数据?

现在我有类似的东西:

consumer.on('data: ', function(data) {
  if(data.value) {
    console.log('data.value', data.value.toString())
  }
})

并打印像 data.value:consumerrange,rdkafka-78bfd5c4-2a48-4573-ae6b-5f5957332b0b,rdkafka-78bfd5c4-2a48-4573-ae6b-5f5957332b0brdkafka /192.168.7.190u0u0__consumer_offsets __consumer_offsets2

1 个答案:

答案 0 :(得分:1)

它看起来不像node-rdkafka(或者kafka-node那样)包含必要的消息格式化程序,因此没有自己编写,可能不是直接写入。

您最好的选择可能只是从child_process的命令行中读取它。

要运行的命令如下所示:

kafka-console-consumer --consumer.config /tmp/consumer.config \
  --formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter" \
  --zookeeper localhost:2181 \
  --topic __consumer_offsets

可以将其作为子进程生成,如下所示:

import { spawn } from 'child_process';

const child = spawn('kafka-console-consumer', ['--formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter"', '--zookeeper', 'localhost:2181', '--topic', '__consumer_offsets'], { stdio: 'pipe' });

// create a handleData and handleError function
child.stdout.on('data', handleData);
child.stderr.on('data', handleError);

如果没有编写自己的消息格式化程序来转换该主题的二进制消息,这可能是您最简单的路径。

以下是有关阅读Kafka消费者抵消的更多信息:https://www.ctheu.com/2017/08/07/looking-at-kafka-s-consumers-offsets/#consuming-consumer-offsets