簡體   English   中英

Kafka消費者停止消費消息

[英]Kafka consumer stops consuming messages

我有一個簡單的 kafka 設置。 生產者正在以高速率向具有單個主題的單個分區生成消息。 單個消費者正在使用來自該分區的消息。 在此過程中,消費者可能會多次暫停處理消息。 暫停可能會持續幾分鍾。 生產者停止生產消息后,所有排隊的消息都會被消費者處理。 似乎消費者沒有立即看到生產者產生的消息。 我正在使用 kafka 0.10.1.0。 這里會發生什么? 這是使用消息的代碼部分:

            while (true)
            {
                try
                {
                    ConsumerRecords<String, byte[]> records = consumer.poll(100);
                    for (final ConsumerRecord<String, byte[]> record : records)
                    {
                        serviceThread.submit(() ->
                        {
                            externalConsumer.accept(record);
                        });
                    }
                    consumer.commitAsync();
                } catch (org.apache.kafka.common.errors.WakeupException e)
                {
                }
            }

其中消費者是禁用自動提交的 KafkaConsumer,最大輪詢記錄為 100,會話超時為 30000。 serviceThread 是一個 ExecutorService。

生產者只涉及 KafkaProducer.send 調用以發送 ProducerRecord。

代理上的所有配置都保留為 kafka 默認值。

我還使用 kafka-consumer-groups.sh 來檢查消費者不消費消息時發生的情況。 但是當這種情況發生時,kafka-consumer-groups.sh 也會掛在那里,無法取回信息。 有時它會觸發消費者重新平衡。 但不總是。

對於那些發現這有幫助的人。 我經常遇到這個問題(當 kafka 應該默默地停止消費時),而且每次它實際上都不是 Kafka 的問題。

通常是一些長時間運行或掛起的靜默進程阻止 Kafka 提交偏移量。 例如,嘗試連接到數據庫的數據庫客戶端。 如果您等待的時間足夠長(例如 SQLAlchemy 和 Postgres 為 15 分鍾),您將看到一個異常將打印到 STDOUT,說諸如connection timed out

暫無
暫無

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

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