解决kafka传输超大图片消费者接收失败问题

记录一下今天解决kafka传输超大图片消费者接收失败问题的过程及收获
项目中需要将实时帧用kafka进行传输,原来帧格式化后的分辨率设置为640x480,大小约为50kb,因后期处理需要更高的分辨率,所以将图片设置为1440x1080,大小约为400kb,结果发现消费者接收不到图片或图片损坏重叠花屏显示。报如下错误:

org.apache.kafka.common.errors.RecordTooLargeException: There are some messages at [Partition=Offset]: {cam1-0=99} whose size is larger than the fetch size 1048576 and hence cannot be ever returned. Increase the fetch size on the client (using max.partition.fetch.bytes), or decrease the maximum message size the broker will allow (using message.max.bytes).

原因是kafka默认的参数已经满足不了项目的需求,需要对kafka进行需要调参,
接下来将对本次涉及到的几个kafka参数进行解释

producer 配置:

  • max.request.size = 5242880 (5M)
    请求的最大大小为字节。要小于 message.max.bytes默认值1M,我这里设置的5M

broker 配置:

  • message.max.bytes=5242880(5M)
    broker能接收消息的最大字节数,这个值应该比消费端的fetch.message.max.bytes更小才对,否则broker就会因为消费端无法使用这个消息而挂起,默认值10000000,我这里设置为5M。
  • replica.fetch.max.bytes=6291456(6M)
    broker可复制的消息的最大字节数(每个分区试图获取的消息字节数)。这个值应该比message.max.bytes大,否则broker会接收此消息,但无法将此消息复制出去,从而造成数据丢失。默认值1M,我这里设置为6M。

Consumer 配置:

  • fetch.message.max.bytes=6291456(6M)
    消费者能读取的最大消息。这个值应该大于或等于message.max.bytes。
    默认值1M,我这里设置为6M。

调完这几个参数,重启kafka server,就可以正常传输高分辨率的图片了,但是传输效率确实比原来要降低一些,至于如何平衡功能和效率,后面我还需要慢慢摸索找到最合适的参数方案。

你可能感兴趣的:(kafka)