使用Kafka处理大型邮件

问题描述 投票:-1回答:1

如何在Kafka中处理超过20MB等大量消息

[2019-03-13 08:59:10,923] ERROR使用密钥向主题测试发送消息时出错:13个字节,值:11947696个字节,错误:(org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)org。 apache.kafka.common.errors.RecordTooLargeException:请求包含的消息大于服务器将接受的最大消息大小。

[2019-03-13 03:59:14,478] ERROR使用密钥向主题测试发送消息时出错:13个字节,值:11947696个字节,错误:(org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)org。 apache.kafka.common.errors.RecordTooLargeException:序列化时消息为11947797字节,大于您使用max.request.size配置配置的最大请求大小。

java apache-kafka kafka-consumer-api kafka-producer-api
1个回答
0
投票

我们需要设置以下配置

经纪人

replica.fetch.max.bytes:对此属性的更改将允许代理中的副本在群集内发送消息,并确保正确复制消息。如果这个太小,则永远不会复制该消息,因此,消费者永远不会看到该消息,因为该消息永远不会被提交(完全复制)。

message.max.bytes:这是代理可以从生产者接收的最大消息大小。

经纪人(主题)

max.message.bytes:Kafka允许的最大记录批量大小。如果这个增加并且有超过0.10.2的消费者,消费者的获取大小也必须增加,以便他们可以获取这么大的记录批次。在最新的消息格式版本中,记录始终按批次分组以提高效率。在以前的消息格式版本中,未压缩的记录不会分组到批次中,并且此限制仅适用于该情况下的单个记录(默认为代理的message.max.bytes)。

制片人

max.request.size:请求的最大大小(以字节为单位)。此设置将限制生产者将在单个请求中发送的记录批次数,以避免发送大量请求。这实际上也是最大记录批量大小的上限。请注意,服务器在记录批量大小上有自己的上限,可能与此不同。

compression.type:设置为snappy,这将增加可以使用单个请求发送的数据总量,并且应该与更大的batch.size配对。

buffer.memory:如果启用了压缩,则也应该提高缓冲区大小。

batch.size:批量大小应该至少为10秒KB,可以看到减少的返回值大约为300kb(远程客户端减少)。更大的批次也可以产生更好的压缩比。

linger.ms:linger.ms优先于批量大小的任何边界。增加此值以确保在较慢的生产时间内不会发送较小的批次

消费者

fetch.message.max.bytes:这将确定消费者可以获取的消息的最大大小。

max.partition.fetch.bytes:服务器将返回的每个分区的最大数据量。

© www.soinside.com 2019 - 2024. All rights reserved.