使用Kafka处理大型邮件

时间:2019-03-13 22:39:23

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

如何在Kafka中处理超过20MB等的大邮件。

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

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

1 个答案:

答案 0 :(得分:0)

我们需要设置以下配置

经纪人

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

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

经纪人(主题)

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

制作人

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

compression.type:设置为“快速”,这将增加可通过单个请求发送的数据总量,并应与更大的batch.size配对。

buffer.memory::如果启用了压缩,则还应增加缓冲区大小。

batch.size::批处理大小至少应为10s KB,在300kb左右可以看到收益递减(对于远程客户端而言较小)。批次越大,压缩率也越好。

linger.ms::linger.ms抢占了批量大小上的所有界限。增大此值可确保在生产速度较慢时不发送较小的批次

消费者

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

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