【问题标题】:Kafka java consumer fetching only a few messages in a call to poll and sometimes none,Can someone help increase the poll countKafka java消费者在调用轮询时只获取几条消息,有时没有,有人可以帮助增加轮询计数
【发布时间】:2020-05-09 22:45:47
【问题描述】:

我的配置:

props.put("sasl.mechanism", "PLAIN");
props.put("enable.auto.commit", "false");
props.put("auto.commit.interval.ms", "1000");
props.put("auto.offset.reset", "latest");
props.put("request.timeout.ms", 16000);
props.put("max.partition.fetch.bytes", "4194304");
props.put("max.poll.records","3000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

ConsumerRecords consumerRecords = consumer.poll(100);

【问题讨论】:

标签: apache-kafka kafka-consumer-api


【解决方案1】:

您可以增加消费者配置fetch.min.bytes,默认为 1,以确保一次获取更多数据。但是,如果在 16secs(在您的 request.timeout.ms 配置中设置)之后没有新数据到达主题,您仍然会看到获取零消息的轮询。

这是consumer configs上的Kafka文档中对fetch.min.bytes配置的完整描述:

fetch.min.bytes:服务器应为获取请求返回的最小数据量。如果可用数据不足,则请求将在响应请求之前等待累积那么多数据。 1 字节的默认设置意味着只要有一个字节的数据可用或获取请求超时等待数据到达,就会响应获取请求。将此设置为大于 1 的值将导致服务器等待大量数据累积,这可以稍微提高服务器吞吐量,但会增加一些延迟。

【讨论】:

  • 将配置,fetch.min.bytes 更改为 12500,这帮助我在第一次调用 poll 时获取了 28k 条记录,但后来在每次调用中它只是获取 10-15 条消息。我是新来的对于这个过程,任何建议都会对我有很大帮助
  • 您在主题中实际拥有多少数据,您如何在消费者中处理这些数据?
  • 我可以在我的主题中看到 66K 条消息,但是当我开始使用消息时,消息延迟变为 0,但我没有获取任何消息,但是随着新消息开始进入主题,我可以提取它们。
  • 您的数据生成速度有多快?看起来您消耗消息的速度比生成消息的速度更快,因此,poll 有时会获取 0 条消息
猜你喜欢
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 2018-09-29
  • 2022-10-15
相关资源
最近更新 更多