【问题标题】:Publish Kafka objects in batches批量发布Kafka对象
【发布时间】:2019-10-07 15:29:59
【问题描述】:

我正在使用 KafkaProducer.send() 方法将记录发布到 Kafka。 这是一种异步方法。我的应用程序正在向 Kafka 发布大约 20k 条记录。成功发送大约 10k 条记录后很多次我得到超时异常。我增加了 batch.size 和 linger.ms 这减少了问题,但有时我仍然会遇到超时异常。 有没有办法一次只发送 10k 条记录,等待它们完成然后发送下一批?我不想通过使用 send.get() 使其同步,因为这会使其非常慢。 这是我得到的例外。

Error publishing object on partition 0 org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s)

【问题讨论】:

  • 你试过用flush()吗?这将阻止您的生产者并使所有消息“准备好发送”。
  • 这是另一个完全相同的问题:stackoverflow.com/questions/46649748/…
  • 我在发送每条消息后都在使用flush()。我不认为这对我有用。
  • 你为什么在每条记录后使用flush()

标签: java apache-kafka kafka-producer-api


【解决方案1】:

您是否尝试将 retries=3 设置为生产者配置?
并且可能在记录到期的情况下,您不应该增加batch.size,而是减少它。

【讨论】:

  • 是的,如果遇到超时,smaller 批次似乎更好。请注意,重试可能会导致生成的消息无序,这对您的应用程序来说可能是也可能不是问题。
  • @Thilo 如何批量发送??
  • 生产者根据配置自动执行此操作(如batch.size
猜你喜欢
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
相关资源
最近更新 更多