簡體   English   中英

消費者的node-kafka pause()方法。 任何工作版本?

[英]node-kafka pause() method on consumer. Any working version?

我無法使用以下代碼:

"use strict";

let kafka = require('kafka-node');
var conf = require('./providers/Config');

let client = new kafka.Client(conf.kafka.connectionString, conf.kafka.clientName);
let consumer = new kafka.HighLevelConsumer(client, [ { topic: conf.kafka.readTopic } ], { groupId: conf.kafka.clientName, paused: true });

let threads = 0;

consumer.on('message', function(message) {
    threads++;

    if (threads > 10) consumer.pause();

    if (threads > 50) process.exit(1);

    console.log(threads + " >>> " + message.value);
});

consumer.resume();

我通過終止語句在控制台和進程退出中看到50條消息。

我想要理解的是,我的代碼是破碎的還是破壞了包裹? 或者我可能只是做錯了什么? 有沒有人能夠通過暫停/恢復讓卡夫卡消費者工作? 我嘗試了幾個版本的kafka-node,但它們都表現相同。 謝謝!

您已在代碼中使用pauseresume ,因此顯然它們可以正常工作。 ;)

這是因為pause不會暫停消息的消耗。 它會暫停提取消息。 我猜你在收到第一條消息並呼叫pause之前已經在一次投擲中獲得了前50個。

對於踢,我剛剛在Node REPL中測試了pause()resume() ,它們按預期工作:

var kafka = require('kafka-node');
var client = new kafka.Client('localhost:2181');
var consumer = new kafka.HighLevelConsumer(client, [{topic: 'MyTest'}]);
consumer.on('message', (msg) => { console.log(JSON.stringify(msg)) });

然后我進入另一個窗口並運行:

 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic MyTest

並輸入一些東西,它會顯示在第一個窗口中。 然后在第一個窗口中輸入: consumer.pause(); 並在第二個窗口中輸入更多內容。 第一個窗口中沒有任何內容。 然后我在第一個窗口中運行consumer.resume() ,並顯示延遲的消息。

順便說一句,你應該能夠使用Kafka配置屬性fetch.message.max.bytes控制一次可以獲取多少消息。 例如,如果您有500字節的固定寬度消息,請將fetch.message.max.bytes設置為小於1000(但大於500!)的值,以便每次獲取只接收一條消息。 但請注意,這可能無法完全解決問題 - 我對Node很新,但它是異步的,我懷疑在完全處理第一次提取(或根本沒有)之前,第二次提取可能會被啟動。

暫無
暫無

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

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