Kafka 设置从主题读取的最大消息数

Kafka set the maximum number of messages to read from the topic

我是 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 堆中。

另一个问题,

下面的代码return一个ByteBufferMessageSet。

fetchResponse.messageSet(topic, partitionId);

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

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

max.poll.records

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