当前位置: 首页 > 面试题库 >

Apache Kafka客户端何时会引发“批处理过期”异常?

越胤
2023-03-14
问题内容

使用Apache Kafka Java客户端(0.9),我试图使用Kafka
Producer类
将一连串的记录发送到代理。

异步发送方法会立即返回一会儿,然后在很短的时间内开始阻塞每个调用。大约三十秒钟后,客户端开始引发异常(TimeoutException),并显示消息
“批处理已过期”

在什么情况下会引发此异常?


问题答案:

此异常表示您正在以比发送记录更快的速率对记录进行排队。

调用
send

方法时,ProducerRecord将存储在内部缓冲区中,以发送给代理。一旦ProducerRecord被缓冲,该方法将立即返回,而不管其是否已发送。

记录被分成 批次 发送到代理,以减少每封邮件偷听运输和提高吞吐量。

将记录添加到批处理中之后,发送该批处理有一个时间限制,以确保已在指定的持续时间内发送了该批处理。这由生产者配置参数
request.timeout.ms
控制,该参数默认为三十秒。

如果批处理的排队时间超过了超时限制,则将引发异常。该批次中的记录将从发送队列中删除。

使用配置参数来增加超时限制,将使客户端可以在过期之前将批处理排队更长的时间。



 类似资料:
  • 使用Apache KafkaJava客户端(0.9),我试图使用Kafka Producer类向代理发送一长串记录。 异步发送方法立即返回一段时间,然后在短时间内开始阻塞每个调用。大约30秒后,客户端开始抛出异常(TimeoutException),并显示消息“Batch expired”。 什么情况导致抛出此异常?

  • 我们在生产方面面临以下问题: 是因为无效的配置,如批量大小、请求超时或其他原因吗?

  • 我有一个使用RESTEasy的简单客户端,如下所示: 服务器配置为在以及一条有用的信息。正在抛出一个。除了包装在中之外,我如何使捕获异常并以字符串形式返回响应的有用消息。我尝试了各种实现,但似乎都是正确的。上述代码从未调用。我错过了什么? 我目前的解决方法是使用,然后执行并将原始状态填充到响应实体中。这样我就避免了异常抛出。

  • 那么如何提取错误代码呢?我想提取错误代码并构建一个responseEntity 我得到了这段代码,但不知道如何在函数中使用。

  • 我最近从Ruby的Net:HTTP类切换到rest-client 1.6.7。

  • 我使用Apache Ignite 2.7.5作为.NET核心中服务器和瘦客户机。当我做与缓存相关的操作时,put、get和load等.net核心应用程序会自动崩溃。 因此,我想处理for循环内部的异常,例如、、等,然后从catch块抛出for循环,否则如果只有异常块,则继续循环迭代。