Apache Kafka:TimeoutException,然后没有任何效果?

Ami*_*ein 2 apache-kafka

我正在尝试将消息从生产者发送到另一个DC中的kafka节点。生产者和使用者都设置为默认0.10.0.0配置,并且消息大小不是很小(大约500k)。在大多数情况下,发送邮件时会遇到以下例外情况:

org.apache.kafka.common.errors.TimeoutException:包含1条记录的批处理由于超时而过期,同时向代理人请求主题0的元数据org.apache.kafka.common.errors.TimeoutException:无法在内部分配内存配置的最大阻止时间为60000 ms。

之后,不再传输任何消息(即使未调用其余消息的回调)。

shi*_*kou 9

我只是想插话,因为今天我收到了完全相同的错误。我尝试增加request.timeout.ms,减少batch.size,甚至将设置batch.size为零。但是,没有任何效果。

原来是因为服务器无法连接到10个Kafka群集节点之一。所以,我看到的是抛出了一些不适当的异常。顺便说一句,如果重要的话,我们将使用Kafka 0.9.0.1。


Abh*_*xit 4

根据卡夫卡文档:

小批量大小将使批处理不太常见,并且可能会降低吞吐量(批量大小为零将完全禁用批处理)。非常大的批处理大小可能会更加浪费内存,因为我们总是会分配指定批处理大小的缓冲区以应对额外的记录。

设置一下batch.size = 0,问题就解决了。

  • 根据 Kafka 文档,“小批量大小将使批处理不太常见,并可能降低吞吐量**(批量大小为零将完全禁用批处理)**。非常大的批量大小可能会更浪费内存,因为我们总是会这样做分配指定批量大小的缓冲区以应对其他记录。” (2认同)