【问题标题】:Apache Kafka: TimeoutException and then nothing works‏Apache Kafka:TimeoutException 然后没有任何效果
【发布时间】:2016-07-13 13:13:48
【问题描述】:

我正在尝试将消息从生产者发送到另一个 DC 中的 kafka 节点。 生产者和消费者都设置了默认的0.10.0.0 配置,并且消息大小不是那么小(大约 500k)。 大多数情况下,我在发送消息时会遇到以下异常:

org.apache.kafka.common.errors.TimeoutException: 包含 1 条记录的批次因超时而过期,同时从代理请求 topic-0 的元数据 org.apache.kafka.common.errors.TimeoutException: 在配置的最大阻塞时间 60000 毫秒内分配内存失败。

在那之后,没有更多的消息被传输(即使是剩余消息的回调也没有被调用)。

【问题讨论】:

  • 您应该检查 server.properties 是否配置: listeners = PLAINTEXT://your.host.name:9092 是否正确。
  • 正确,端口开放
  • 我找到了blog.csdn.net/fst438060684/article/details/82144653 详细的解释在这里你必须选择适合你的解决方案。

标签: apache-kafka


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    根据 Kafka 文档:

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

    设置batch.size = 0,即可解决问题。

    【讨论】:

    • 感谢您的回答。但为什么会这样呢?
    • 根据 Kafka 文档“小批量会使批处理不太常见,并且可能会降低吞吐量(批量为零将完全禁用批处理)。非常大的批量可能会更浪费一点内存,因为我们总是会分配指定批量大小的缓冲区来预期额外的记录。”
    • 答案本身就在你的问题中,你遇到了内存分配问题,设置这个低的主要原因是内存不足——Kafka 总是会为整个批量大小分配足够的内存。
    • @Aby 减少 batch.size 从来没有帮助。这最终会影响吞吐量和延迟。
    • 减少 batch.size 没有帮助。这最终会影响吞吐量和延迟
    猜你喜欢
    • 2018-11-29
    • 2018-06-14
    • 2019-06-19
    • 2017-07-18
    • 2010-10-17
    • 2012-11-25
    • 2016-04-30
    • 1970-01-01
    • 2016-10-06
    相关资源
    最近更新 更多