Kafka总结——KafkaProducer

    我司使用kafka版本为1.1.0,主要有两个使用场景:其一,消息通信;其二,与spark streaming集成使用。本文用来记录笔者对kafka producer的使用、理解。

Producer主要工作过程

1、 将消息包装成ProducerRecord对象
2、 对ProducerRecord对象进行序列化
3、 Interceptor(该步骤暂时没有使用场景)
4、 通过partitioner,选择producerrecord发往的分区
5、 准备发往kafka broker
6、 等待broker的响应

Producer主要参数

配置项 说明
Buffer.memory 默认32m
Buffer.size 默认16k
Linger.ms 默认0
Acks 默认值1
Compression.type 默认值none
Max.request.size 默认1M
Max.block.ms 默认60s
  1. Buffer.memory,用来指定Kafka Producer实例使用的缓存空间大小。
  2. Buffer.size和linger.ms,这两个参数决定何时真正把message发送到kafka broker。当内存中存在的message条数超过buffer.size,或者延迟了linger.ms,便会将缓冲空间中的消息发出去。
  3. Acks,消息发出去,broker何时会返回一个发送成功的响应。默认值为1,即只需要该topic partition 的leader收到该消息,并持久化成功即可。我司一般都使用该默认值。
  4. Compression.type,对消息进行压缩,可以减少网络传输消耗,但是会增加cpu的消耗。另外如何此处设置的compression.type和broker server.properties中配置的压缩方式不一样,那broker会先进行解压缩,再用server端配置的压缩方式再次压缩。
  5. Max.request.size,限制单条消息的最大值
  6. Max.block.ms,当buffer.memory已满(即producer往缓存发送的速度已经远大于往broker发送线程的速度),会让发送线程阻塞一段时间,该时间就由此参数决定,默认60s。

其它

    平时使用时,Message内容全部放在value部分,key为null,so,producer使用轮询方式去发送消息。
    虽然Kafka producer是线程安全的;但在多线程情况下,我还是采用一个线程一个Producer的方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章