簡體   English   中英

如何使用kafka-node從主題讀取數據?

[英]How to read data from topic using kafka-node?

我有必須從kafka服務器讀取的主題,因此,我只需要創建可以從kafka主題讀取數據的使用者,我總是會得到錯誤主題。

1-我如何確保建立kafka連接?

2-如何從kafka中的特定主題獲取數據?

main.js

var kafka = require('kafka-node');
var config = require('./config.js');
var kafkaConn = config.kafkaCon.dit;
var HighLevelConsumer = kafka.HighLevelConsumer;
//var HighLevelProducer = kafka.HighLevelProducer;
var Client = kafka.Client;
var Offset = kafka.Offset;
var topics = [{topic: 'UEQ'}];
var client = new Client(kafkaConn);
var payloads = [ { topic: topics, partition : 0}];
var options = {
    groupId: 'kafka-node-group',
// Auto commit config
    autoCommit: true,
    autoCommitMsgCount: 100,
    autoCommitIntervalMs: 5000,
// Fetch message config
    fetchMaxWaitMs: 100,
    fetchMinBytes: 1,
    fetchMaxBytes: 1024 * 10,
};
var consumer = new HighLevelConsumer(client, payloads, options);

consumer.on('message', function (message) {
    console.log('TEST',this.id, message);
});

錯誤

events.js:141
      throw er; // Unhandled 'error' event
      ^
 TopicsNotExistError: The topic(s) [object Object] do not exist
    at new TopicsNotExistError (C:\uilogging\node_modules\kafka-node\lib\errors\
TopicsNotExistError.js:11:11)

我正在做一個類似的項目,我在自己的服務器上有一個Kafka生產者,並且正在使用Kafka-Node作為我的應用程序的使用者。 我對Kafka-Node相當陌生,並且沒有太多經驗,但是我可以嘗試分享一些我發現的見解。

我相信您的問題實際上是您的主題不存在。

1.如何確定Kafka連接已建立?

如果您的連接沒有建立,我認為它不會繼續說該主題不存在。 當我鍵入一個不存在的主題並且為我的Kafka生產者鍵入一個隨機IP時,沒有任何錯誤。 但是,當我指向正確的IP,並且仍然有不正確的主題時,您會看到相同的錯誤。

2.此代碼適用於我的應用程序

var kafka = require('kafka-node');
var Consumer = kafka.Consumer,
    // The client specifies the ip of the Kafka producer and uses
    // the zookeeper port 2181
    client = new kafka.Client("<ip to producer>:2181"),
    // The consumer object specifies the client and topic(s) it subscribes to
    consumer = new Consumer(
        client, [ { topic: 'myTopic', partition: 0 } ], { autoCommit: false });

consumer.on('message', function (message) {
    // grab the main content from the Kafka message
    var data = JSON.parse(message.value);
    console.log(data);
});

希望這不會太晚。

如果出於調試/開發目的需要此功能,則只需添加以下導入(以下代碼為ES6格式),當建立連接或有任何失敗消息時,控制台應該注銷一條消息:

this.kafkaLogging = require('kafka-node/logging');
this.kafkaLogging.setLoggerProvider(this.getLoggerProvider);

...

getLoggerProvider() {
    return {
        debug: console.log.bind(console),
        info : console.log.bind(console),
        warn : console.log.bind(console),
        error: console.log.bind(console)
    };
}

暫無
暫無

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

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