kafka生产者写入大消息

最近项目遇到一个特殊场景,需要kafka传递100万条数据过去,1个G左右,由于其他环节限制,不能进行拆包。

 

一开始生产者一直报网络问题,经过需要修改如下参数,为了探寻之前说的不能超过1G的说法,把所有参数上限都设置成了接近2G

  

config/server.properties

 

socket.request.max.bytes=2048576000  

log.segment.bytes=2073741824

message.max.bytes=2048576000

replica.fetch.max.bytes=2048576000

fetch.message.max.bytes=2048576000  ---这个好像不应该设置在server.propeties里面,这个是consumer的参数,后续验证吧。

replica.socket.timeout.ms=300000   --这个参数好像也不需要设置,但是需要在生产者里设置request.timeout.ms。否则,发送时间过长导致发送失败。

 

参数说明:

 

socket.request.max.bytes =100*1024*1024

socket请求的最大数值,防止serverOOMmessage.max.bytes必然要小于socket.request.max.bytes,会被topic创建时的指定参数覆盖

 

 

log.segment.bytes =1024*1024*1024

topic的分区是以一堆segment文件存储的,这个控制每个segment的大小,会被topic创建时的指定参数覆盖

 

message.max.bytes =6525000

表示消息体的最大大小,单位是字节

 

replica.fetch.max.bytes =1024*1024

replicas每次获取数据的最大大小

 

fetch.message.max.bytes=1024*1024

每个拉取请求的每个topic分区尝试获取的消息的字节大小。这些字节将被读入每个分区的内存,因此这有助于控制消费者使用的内存。 拉取请求的大小至少与服务器允许的最大消息的大小一样大,否则生产者可能发送大于消费者可以拉取的消息。

 

replica.socket.timeout.ms

网络请求的socket超时,该值最少是replica.fetch.wait.max.ms

 

 

 

 

 生产者设定

  props.put("max.request.size", 2073741824);

  props.put("buffer.memory", 2073741824);

  props.put("timeout.ms", 30000000);

  props.put("request.timeout.ms", 30000000);

猜你喜欢

转载自tianmaotalk.iteye.com/blog/2398082