2. Option External Store
-
使用外部存储,GB级消息;
-
如发送视频文件,修改客户端,仅向Kafka发送消息的引用(reference);
-
大消息的存储可以是云存储,如Aws S3,或内部部署的大型文件存储系统,如网络系统或Hdfs;
3. Option Configuration
-
通过配置发送超过1MB但小于10MB的消息;
-
我们需修改主题,生产者,消费者三者的配置,以允许更大的消息大小;
3.1. Broker Side
-
建议保留broker的最大消息大小的默认值,且仅通过主题级配置覆盖override设置;
Entry | Memo |
---|---|
令人迷惑Confusing的设置 |
|
broker-side |
message.max.bytes |
topic-side |
max.message.bytes |
-
创建主题topic-large-msg:
./kafka-topics.sh \
--bootstrap-server 192.168.0.123:9092 \
--topic topic-large-msg --create \
--partitions 3 --replication-factor 1
-
添加必要的配置为10MB:
And add the necessary max.message.bytes configuration for 10MB
并添加必要的 max.message.bytes 配置为 10MB
./kafka-configs.sh --bootstrap-server 192.168.0.123:9092 \
--alter --entity-type topics \
--entity-name topic-large-msg \
--add-config max.message.bytes=10485880
-
现在主题已创建,并配置为接受大消息,但还不够,
还必须设置:replica.fetch.max.bytes=10485880; -
以便broker可正确复制replicate大消息,
此设置只能在server.properties中设置,且必须重启broker;
3.2. Consumer Side
-
还必须更改消费者端和消费者客户端上的max.partition.fetch.bytes配置;
-
若此此值小于message.max.bytes,消费者将无法获取这些消息,
且会陷入处理困境stuck on processing,这是非常不希望的undesirable; -
使用—consumer-property来配置:
./kafka-console-consumer.sh --bootstrap-server 192.168.0.123:9092 \
--topic topic-large-msg \
--from-beginning \
--consumer-property max.partition.fetch.bytes=10485880
-
或使用Java代码更改:
properties.setProperty(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, "10485880");
3.3. Producer Side
-
必须更改生产者端producer-side的max.request.size,以确保可发送大消息;
-
Cli使用—producer-property更改:
./kafka-console-producer.sh --bootstrap-server 192.168.0.123:9092 \
--topic topic-large-msg \
--producer-property max.request.size=10485880
-
或使用Java代码更改:
properties.setProperty(ProducerConfig.MAX_REQUEST_SIZE_CONFIG,"10485880");