【问题标题】:Kafka set the maximum number of messages to read from the topicKafka 设置从主题中读取的最大消息数
【发布时间】:2019-10-23 22:50:45
【问题描述】:

我是 Apache Kafka 的新手,正在探索 SimpleConsumer 以读取来自该主题的消息。

我使用下面的代码来做同样的事情,

FetchRequestBuilder builder = new FetchRequestBuilder();
FetchRequest fetchRequest = builder.addFetch(topic, partitionId, offset, 1024).build();
FetchResponse fetchResponse;
try {
     fetchResponse = consumer.fetch(fetchRequest);
 } catch (Exception e) {}

这会读取特定分区中的所有可用消息;我想设置要阅读的最大消息数。在这个阶段有没有办法做到这一点?当队列中有大量消息时,我不希望所有消息都落在 JVM 堆中。

另一个问题,

以下代码返回一个 ByteBufferMessageSet。

fetchResponse.messageSet(topic, partitionId);

这是否意味着并非所有可用的消息都真正进入内存?

【问题讨论】:

    标签: java memory apache-kafka kafka-consumer-api


    【解决方案1】:

    虽然您不能限制 消息 的数量,但您可以限制每个请求的每个主题分区接收的 字节 数量。但是,这应该作为配置设置完成,而不是作为消费者实现代码的一部分。 Kafka consumer config docs 表示您可以指定读取的最大字节数为socket.receive.buffer.bytes。这应该允许您更细粒度地控制 Kafka 消息在 JVM 堆中究竟占用了多少空间。请注意,此值必须等于或大于代理上的最大消息大小,否则生产者可能会发送太大而无法消费的消息。

    【讨论】:

      【解决方案2】:
      max.poll.records
      

      在一次 poll() 调用中返回的最大记录数。 https://kafka.apache.org/documentation/#consumerconfigs

      【讨论】:

        猜你喜欢
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 2018-01-12
        相关资源
        最近更新 更多