[英]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,但它們都表現相同。 謝謝!
您已在代碼中使用pause
和resume
,因此顯然它們可以正常工作。 ;)
這是因為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.