[英]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.