Java 卡夫卡消费者停止消费信息

Java 卡夫卡消费者停止消费信息,java,apache-kafka,Java,Apache Kafka,我有一个简单的卡夫卡设置。生产者以高速率向单个分区和单个主题生成消息。单个使用者正在使用来自此分区的消息。在此过程中,消费者可能会暂停处理消息数次。暂停可能会持续几分钟。生产者停止生成消息后,消费者将处理排队的所有消息。消费者似乎看不到生产者发出的消息。我使用的是卡夫卡0.10.1.0。这里会发生什么?以下是使用该消息的代码部分: while (true) { try {

我有一个简单的卡夫卡设置。生产者以高速率向单个分区和单个主题生成消息。单个使用者正在使用来自此分区的消息。在此过程中,消费者可能会暂停处理消息数次。暂停可能会持续几分钟。生产者停止生成消息后,消费者将处理排队的所有消息。消费者似乎看不到生产者发出的消息。我使用的是卡夫卡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)
                {
                }
            }
while(true)
{
尝试
{
ConsumerRecords记录=consumer.poll(100);
用于(最终消费者记录:记录)
{
serviceThread.submit(()->
{
外部消费者接受(记录);
});
}
consumer.commitAsync();
}catch(org.apache.kafka.common.errors.WakeupException e)
{
}
}
其中消费者是禁用自动提交、最大轮询记录为100、会话超时为30000的卡夫卡消费者。serviceThread是一个ExecutorService

制作人只是让卡夫卡制作人参与进来。send call可发送制作人记录

代理上的所有配置都保留为kafka默认值


我还使用kafka-consumer-groups.sh检查当消费者不使用消息时发生的情况。但当这种情况发生时,kafka-consumer-groups.sh也将挂在那里,无法获得信息。有时它会触发消费者重新平衡。但并非总是如此。

对于那些认为这有帮助的人来说。我经常遇到这个问题(当卡夫卡无声地停止消费时),每次都不是卡夫卡的问题


通常是一些长时间运行或挂起的静默进程阻止Kafka提交偏移量。例如,一个数据库客户端试图连接到数据库。如果您等待的时间足够长(例如,SQLAlchemy和Postgres等待15分钟),您将看到一个异常将被打印到STDOUT,对那些认为这有帮助的人来说,会说一些类似于连接超时的话。我经常遇到这个问题(当卡夫卡无声地停止消费时),每次都不是卡夫卡的问题


通常是一些长时间运行或挂起的静默进程阻止Kafka提交偏移量。例如,一个数据库客户端试图连接到数据库。如果您等待足够长的时间(例如,SQLAlchemy和Postgres等待15分钟),您将看到异常将打印到标准输出,例如
连接超时

而不是100ms,您是否有机会为轮询超时设置更大的值并重试?尝试了1000次,仍然是相同的行为。通过“停止使用消息“,你是说卡夫卡消费者调查结果总是空的吗?我知道这里发生了什么。Kafka broker允许在将消息写入磁盘之前累积消息。默认情况下,kafka代理可以累积最多一分钟的消息,而不限制累积多少消息。在将这些消息刷新到磁盘之前,使用者无法访问这些消息。减少这些值后,它将消除消费者暂停。类似的
客户端表达式只会看到提交的消息。
由Kafka保证。您是否有机会为轮询超时设置更大的值并重试?尝试了1000次,仍然是相同的行为。通过“停止消费消息”,你是说KafkaConsumer#poll总是返回空的吗?我知道这里发生了什么。Kafka broker允许在将消息写入磁盘之前累积消息。默认情况下,kafka代理可以累积最多一分钟的消息,而不限制累积多少消息。在将这些消息刷新到磁盘之前,使用者无法访问这些消息。减少这些值后,它摆脱了消费者的停顿。类似的
客户端表达式只看到提交的消息。
由Kafka保证。