Kafka学习(6)——优化指南

本文介绍了Kafka处理大消息的优化策略,包括使用共享存储传送文件位置、消息切片和压缩。此外,还详细讨论了Broker、Producer和Consumer的配置调整,以及如何应对MessageSizeTooLargeException等常见错误。建议在设计之初就考虑大消息对集群和主题的影响,以确保系统的稳定性和性能。
摘要由CSDN通过智能技术生成

Kafka设计的初衷是迅速处理短小的消息,一般10K大小的消息吞吐性能最好(可参见LinkedIn的kafka性能测试)。但有时候,我们需要处理更大的消息,比如XML文档或JSON内容,一个消息差不多有10-100M,这种情况下,Kakfa应该如何处理?

针对这个问题,有以下几个建议:

  • 最好的方法是不直接传送这些大的数据。如果有共享存储,如NAS, HDFS, S3等,可以把这些大的文件存放到共享存储,然后使用Kafka来传送文件的位置信息。
  • 第二个方法是,将大的消息数据切片或切块,在生产端将数据切片为10K大小,使用分区主键确保一个大消息的所有部分会被发送到同一个kafka分区(这样每一部分的拆分顺序得以保留),如此以来,当消费端使用时会将这些部分重新还原为原始的消息。
  • 第三,Kafka的生产端可以压缩消息,如果原始消息是XML,当通过压缩之后,消息可能会变得不那么大。在生产端的配置参数中使用compression.codec和commpressed.topics可以开启压缩功能,压缩算法可以使用GZip或Snappy。

1. Broker配置

  • message.max.bytes

    默认:1000000。broker能接收消息的最大字节数,这个值应该比消费端的fetch.message.max.bytes更小才对,否则broker就会因为消费端无法使用这个消息而挂起。

  • log.segment.bytes

    默认: 1GB。kafka数据文件的大小,确保这个数值大于一个消息的长度。一般说来使用默认值即可(一般一个消息很难大于1G,因为这是一个消息系统,而不是文件系统)。

  • replica.fetch.max.bytes

    默认: 1MB。broker可复制的消息的最大字节数。这个值应该比message.max.bytes大,否则broker会接收此消息,但无法将此消息复制出去,从而造成数据丢失。

2. Producer配置

producer方面没有什么太多需要优化的,最需要注意的一点是:不要使用0.8版本的Producer

0.8版本的Producer在面对大量数据的写入时,会导致producer端使用的直接内存无法释放,最终导致应用被操作系统中断掉。

3. Consumer配置

  • fetch.message.max.bytes

    默认 1MB。消费者能读取的最大消息。这个值应该大于或等于message.max.bytes。 所以,如果你一定要选择kafka来传

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值