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

时间:2015-02-17 00:59:13

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

我是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);

这是否意味着,并非所有可用的消息都实际存在于内存中?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

max.poll.records

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