Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 fetch max bytes无法按预期工作_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

Apache kafka Kafka fetch max bytes无法按预期工作

Apache kafka Kafka fetch max bytes无法按预期工作,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我有一个相当于1GB信息的主题。A.卡夫卡消费者决定消费这些消息。我可以做些什么来禁止消费者一次消费所有消息?我试着去设定目标 在代理上获取.max.bytes 设置为30 MB以在每次轮询中仅允许30 MB的消息。代理似乎不尊重这一点,并试图将所有消息一次发送给消费者,从而导致消费者内存不足错误。如何解决这个问题?卡夫卡的配置可能会让人难以承受。通常在卡夫卡中,多个配置可以协同工作以实现一个结果。这带来了灵活性,但灵活性是有代价的 从fetch.max.bytes的文档中: 记录由使用者分批获

我有一个相当于1GB信息的主题。A.卡夫卡消费者决定消费这些消息。我可以做些什么来禁止消费者一次消费所有消息?我试着去设定目标

在代理上获取.max.bytes


设置为30 MB以在每次轮询中仅允许30 MB的消息。代理似乎不尊重这一点,并试图将所有消息一次发送给消费者,从而导致消费者内存不足错误。如何解决这个问题?

卡夫卡的配置可能会让人难以承受。通常在卡夫卡中,多个配置可以协同工作以实现一个结果。这带来了灵活性,但灵活性是有代价的

从fetch.max.bytes的文档中:

记录由使用者分批获取,如果获取的第一个非空分区中的第一个记录批次大于此值,则仍将返回该记录批次以确保使用者能够取得进展

只有在消费者方面,有更多的配置考虑消费者的内存使用,包括:

max.poll.records:限制在单个轮询调用中检索的记录数。默认值为500。 max.partition.fetch.bytes:限制每个分区获取的字节数。这应该不是问题,因为默认值为1MB。 根据中的信息,实际上的内存使用应该类似于minnum代理*max.fetch.bytes,max.partition.fetch.bytes*num_分区

此外,在同一KIP中:

使用者获取程序延迟解压,直到记录返回给用户,但由于max.poll.records的原因,它可能会在几个迭代中保留来自单个分区的解压数据


我建议您也调整这些参数,希望这将使您进入所需状态。

卡夫卡配置可能会非常强大。通常在卡夫卡中,多个配置可以协同工作以实现一个结果。这带来了灵活性,但灵活性是有代价的

从fetch.max.bytes的文档中:

记录由使用者分批获取,如果获取的第一个非空分区中的第一个记录批次大于此值,则仍将返回该记录批次以确保使用者能够取得进展

只有在消费者方面,有更多的配置考虑消费者的内存使用,包括:

max.poll.records:限制在单个轮询调用中检索的记录数。默认值为500。 max.partition.fetch.bytes:限制每个分区获取的字节数。这应该不是问题,因为默认值为1MB。 根据中的信息,实际上的内存使用应该类似于minnum代理*max.fetch.bytes,max.partition.fetch.bytes*num_分区

此外,在同一KIP中:

使用者获取程序延迟解压,直到记录返回给用户,但由于max.poll.records的原因,它可能会在几个迭代中保留来自单个分区的解压数据


我建议您也调整这些参数,希望这将使您进入所需状态。

谢谢您的建议。我尝试了max.partition.fetch.bytes,它工作得很好,但是,它会删除低于该数字的消息。我在卡夫卡上的最大邮件大小是5 MB。当我将max.partition.fetch.bytes设置为5 MB时,我没有得到任何返回。不确定这是卡夫卡代理内存问题还是我需要调整的问题是的,这是一个限制。max.partition.fetch.bytes必须始终大于max.message.bytes代理配置。否则,使用者可能无法使用所有消息。如果我有一个由3个代理组成的集群,并且我设置了max.partition.fetch.bytes,会发生什么情况?我看到奇怪的反应。有时读取来自2个代理的分区,而有时只读取1个代理。它不提供所有3个代理的所有分区。正因为如此,当我从代理返回的数据少于预期时,延迟就会增加。如回答中所述,num代理可能会影响内存使用,但根据观察到的确切行为,它也可能与分区数或会话超时配置有关。由于这是一个带有特定问题的后续问题,我强烈建议您将其作为一个单独的新问题发布,并确保指定可用堆内存、代理数量、主题、分区、使用者实例和会话超时,以及任何日志和观察到的错误或行为。在节点kafka中使用max.fetch.bytes似乎是阻止kafka的唯一方法,这导致我跑掉错误,如下所述:。我用50k的最大抓取字节来点击这个,每个消息大约有2k。谢谢你的建议。我尝试了max.partition.fetch.bytes,它工作得很好,但是,它会删除低于该数字的消息。我在卡夫卡上的最大邮件大小是5
兆字节当我将max.partition.fetch.bytes设置为5 MB时,我没有得到任何返回。不确定这是卡夫卡代理内存问题还是我需要调整的问题是的,这是一个限制。max.partition.fetch.bytes必须始终大于max.message.bytes代理配置。否则,使用者可能无法使用所有消息。如果我有一个由3个代理组成的集群,并且我设置了max.partition.fetch.bytes,会发生什么情况?我看到奇怪的反应。有时读取来自2个代理的分区,而有时只读取1个代理。它不提供所有3个代理的所有分区。正因为如此,当我从代理返回的数据少于预期时,延迟就会增加。如回答中所述,num代理可能会影响内存使用,但根据观察到的确切行为,它也可能与分区数或会话超时配置有关。由于这是一个带有特定问题的后续问题,我强烈建议您将其作为一个单独的新问题发布,并确保指定可用堆内存、代理数量、主题、分区、使用者实例和会话超时,以及任何日志和观察到的错误或行为。在节点kafka中使用max.fetch.bytes似乎是阻止kafka的唯一方法,这导致我跑掉错误,如下所述:。我用50k的最大fetch字节来实现这一点,每条消息大约有2k。