Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 如何限制Kafka consumer中的记录数_Apache Kafka_Confluent Platform_Kafka Rest - Fatal编程技术网

Apache kafka 如何限制Kafka consumer中的记录数

Apache kafka 如何限制Kafka consumer中的记录数,apache-kafka,confluent-platform,kafka-rest,Apache Kafka,Confluent Platform,Kafka Rest,我正在使用confluent产品来使用某个主题的记录。我的意图是只使用topic中的前100条记录。我正在使用以下RESTAPI获取记录 GET /consumers/testgroup/instances/my_consumer/records 如何做到这一点?有什么想法吗?如果您试图使用来自消费群体的100条消息的新批次,您应该将max_bytes设置为一个值,对于您的数据模型,该值将始终返回大约100条记录。你可以有一个更保守的逻辑(得到更少,然后得到更多,直到截止值为100),或者你可

我正在使用confluent产品来使用某个主题的记录。我的意图是只使用topic中的前100条记录。我正在使用以下RESTAPI获取记录

GET /consumers/testgroup/instances/my_consumer/records

如何做到这一点?有什么想法吗?

如果您试图使用来自消费群体的100条消息的新批次,您应该将max_bytes设置为一个值,对于您的数据模型,该值将始终返回大约100条记录。你可以有一个更保守的逻辑(得到更少,然后得到更多,直到截止值为100),或者你可以总是得到更多,然后忽略。在这两种方式中,您都应该对您的消费群体采用手动抵销管理

GET /consumers/testgroup/instances/my_consumer/records?max_bytes=300000
如果收到的消息超过100条,并且由于某种原因忽略了它们,那么如果启用了“偏移自动提交”(offset auto commit)(在创建消费者时定义),您将不会在该消费者组上再次收到它们。你可能不想发生这种事

如果您手动提交偏移量,那么如果您随后提交正确的偏移量以保证不会丢失任何消息,则可以忽略任何您想要的内容。您可以手动提交偏移,如下所示:

POST /consumers/testgroup/instances/my_consumer/offsets HTTP/1.1
Host: proxy-instance.kafkaproxy.example.com
Content-Type: application/vnd.kafka.v2+json

{
  "offsets": [
    {
      "topic": "test",
      "partition": 0,
      "offset": <calculated offset ending where you stopped consuming for this partition>
    },
    {
      "topic": "test",
      "partition": 1,
      "offset": <calculated offset ending where you stopped consuming for this partition>
    }
  ]
}

据我所知,这是目前不可能的。正如在另一个答案中提到的,您可以指定以字节为单位的最大大小(尽管在某些情况下代理实际上可以忽略这一点),但无法指定所需的消息数


但是,这样的特性可以很容易地在客户机代码中实现。您可以猜测大致大小,查询RESTAPI并查看您收到了多少条消息。如果小于100,则再次查询以获取接下来的几条消息,直到达到100。

可以使用属性
ConsumerConfig.MAX\u POLL\u RECORDS\u CONFIG
来配置您的
KafkaConsumer
。请参见

您使用的消费者组保留消费者偏移量,因此当您请求新记录时,您无法获得该主题的第一条记录。您将获得尚未消费的新记录。您真的想要该主题的前100条记录,还是希望在每次API Rest调用时使用100条记录?此外,您似乎可以使用的唯一大小控制参数是
max_bytes
,它不会直接转换为记录数,但是应该适合您。不要认为这是可能的:
Consumer配置-虽然Consumer实例没有共享,但它们确实共享底层服务器资源。因此,有限的配置选项通过API公开。但是,您可以通过在REST代理配置中传递使用者设置来全局调整设置。
但不提及任何相关设置通过使用
max_bytes
控制返回消息的数量,您假定所有消息的大小完全相同。实际上,这种情况很少发生,所以不太可能发生。是的,这就是为什么我强调“您应该将max_bytes设置为一个值,对于您的数据模型,该值将始终返回大约100条记录”,但我将进一步澄清。好的。但我不知道传入的数据。它是动态的。因此,连同max_字节,confluent可以支持从主题中检索的消息数量。
POST /consumers/testgroup/instances/my_consumer/offsets HTTP/1.1
Host: proxy-instance.kafkaproxy.example.com
Content-Type: application/vnd.kafka.v2+json

{
  "offsets": [
    {
      "topic": "test",
      "partition": 0,
      "offset": 0
    },
    {
      "topic": "test",
      "partition": 1,
      "offset": 0
    }
  ]
}