如何使用nodejs向kafka 10消息添加时间戳

时间:2017-06-09 22:26:34

标签: node.js timestamp apache-kafka node-red kafka-producer-api

我使用nodejs重新编写了一个节点红色的Kafka生产者节点。 我注意到Kafka10添加了关于在发送给生产者的消息上附加时间戳的功能,但我发现只是java示例。 如何使用nodejs为消息添加时间戳?

在下面我将报告如何在nodejs中实现生产者:

function kafkaAdvancedNode(config) {
    RED.nodes.createNode(this,config);
    var topic = config.topic;
    var partition = config.partition;
    var clusterZookeeper = config.zkquorum;
    var debug = (config.debug == "debug");
    var node = this;
    var kafka = require('kafka-node');
    var HighLevelProducer = kafka.HighLevelProducer;
    var Client = kafka.Client;
    var topics = config.topics;
    var client = new Client(clusterZookeeper);

    try {
        this.on("input", function(msg) {
            var payloads = [];

            // check if multiple topics
            if (topics.indexOf(",") > -1){
                var topicArry = topics.split(',');

                for (i = 0; i < topicArry.length; i++) {
                    payloads.push({topic: topicArry[i], messages: msg.payload});
                }
            }
            else {
                if(partition == "" || !partition)
                    payloads = [{topic: topics, messages: msg.payload}];
                else
                    payloads = [{topic: topics, messages: msg.payload, partition: partition}];
            }

            producer.send(payloads, function(err, data){
                if (err){
                    node.error(err);
                }
                node.log("Message Sent: " + data);
            });
        });
    }
    catch(e) {
        node.error(e);
    }
    var producer = new HighLevelProducer(client);
    this.status({fill:"green",shape:"dot",text:"connected to "+clusterZookeeper});
}

在谷歌上我发现了这个:link

但实际上我并不了解如何整合我的代码(什么是Avro?)

1 个答案:

答案 0 :(得分:0)

我不认为kafka-node支持0.10 Kafka协议,因此它不太可能支持消息的时间戳。

出于这个(和其他)原因,我使用node-rdkafka编写了类似的东西,并将其发布为node-red-contrib-rdkafka。见https://github.com/hjespers/node-red-contrib-rdkafka

更新:我刚刚发布了node-red-contrib-rdkafka的新版本(0.2.0),它支持0.10和#34;事件时间&#34;或者&#34;处理时间&#34;时间戳以及动态主题,键和分区。