![](/img/trans.png)
[英]How to consume the latest message from Kafka-consumer using NodeJs?
[英]service not consume message from all topic consumer group on AWS Kafka Cluster
我對 AWS 和 Kafka 集群非常陌生。
我們有NodeJs
服務,它連接到兩個不同的Kafka cluster
。 我們有多個消費者服務實例,每個實例都使用每個主題的記錄,但從過去幾周開始,我們發現服務(消費者)沒有從訂閱主題列表中的每個主題消費消息,這組主題每次都不同. 我們有 5 個不同的aws
主機用於消費者服務。 當我運行describe consumer group command
時,我看到一些主題沒有附加任何消費者。 每次這個未分配的消費者主題列表都是不同的。
我很抱歉再次更新問題,但是在調試問題時發現了這個新問題。
代碼
KafkaProcessor.subscribetotopic = async (topic) => {
const consumer = KafkaService.getConsumer(consumer);
const message = {
topic,
fromBeginning: true,
};
await consumer.subscribe(message);
logger.info(`Successfully subscribed to topic ${topic}`);
};
KafkaProcessor.subscribetotopiclist = async (topiclist) => {
const promises = [];
for (const topic of topiclist) {
promises.push(KafkaProcessor.subscribetotopic(topic));
}
await Promise.all(promises);
logger.info(`Successfully subscribed to topic ${topiclist.join()}`);
};
調試此問題的更好方法是使用 ConsumerGroupCommand 工具檢查您的消費者組。 這將使您更好地了解您的消費者實例。
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group
--members --verbose :在上面的“--members”選項報告的信息之上,這個選項還提供了分配給每個成員的分區。
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group --members
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group --members –verbose
您確定要推出 5 個不同的消費者嗎?
問題在於,實際上,您只啟動了一個訂閱所有主題的消費者線程。
const consumer = KafkaService.getConsumer(consumer); //always returns the same
檢查describe-groups輸出的consumer-id
字段:我確定所有主題的 consumer-id 都是相同的。 這意味着一個線程必須讀取每個主題的所有分區。 如果您等待足夠長的時間(可能是幾個小時),您可能會看到所有主題都在閱讀(最后)。
您的消費者正在這樣做乘以您擁有的主題數量......只是沒有足夠的資源來同時讀取所有主題。
應該將循環中的const consumer
分配給一個新的 KafkaConsumer,以便您實際擁有 5 個消費者線程。
像這樣的東西(我不知道KafkaService,只是把它當作偽代碼)
const consumer = KafkaService.createConsumer(consumerParams);
//consumerParams being group.id, etc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.