我对 Kafka 2.6.0 中的消息大小配置有点困惑。但我们还是先讲个故事吧:
我们使用由 3 个节点组成的 Kafka 集群。到目前为止,消息的标准配置已经完成。“zstd 压缩”已激活。
相关broker配置很简单:
compression.type=zstd
Run Code Online (Sandbox Code Playgroud)
此时生产者配置也很简单:
compression.type=zstd
Run Code Online (Sandbox Code Playgroud)
现在我们想将 8 MB 的消息放入特定主题中。该数据的压缩大小仅为 200 kbyte。
如果我将此数据放入主题中,则会发生以下错误:
sudo /opt/kafka/bin/kafka-console-producer.sh --topic XXX --producer.config /opt/kafka/config/admin-ssl.properties --broker-list broker < kafka/new\ 2.txt
[2020-11-05 13:43:34,500] ERROR Error when sending message to topic XXX with key: null, value: 8722456 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.RecordTooLargeException: The message is 8722544 bytes when serialized which is larger than 1048576, which is the value of the max.request.size configuration.
Run Code Online (Sandbox Code Playgroud)
所以我改变了生产者配置,如下所示:
compression.type=zstd
max.request.size=10485760
Run Code Online (Sandbox Code Playgroud)
现在生产者接受更大的消息。但它仍然不起作用:
sudo /opt/kafka/bin/kafka-console-producer.sh --topic XXX …Run Code Online (Sandbox Code Playgroud)