kafka源码_Kafka生产者源码分析

从一个Demo入手

我们Kafka源码的doc文档拿下来一个Demo,这个Demo用于向服务端发送消息,从这个例子我们可以知道发送消息是通过生产者的KafkaProducer来完成的,这一篇文章将先完成KafkaProducer的分析.

Properties 

初始化过程

先看看KafkaProducer的初始化方法,可以看出KafkaProducer是通过一些键值对的配置来实例化的。

v2-78c415ebc9cce76a2f0bccdd997c8875_b.png

跟进去,下面这一段是metric,对于我们理解生产者影响不大,忽略掉

v2-d8e7c482f808240c9a3e81568992a483_b.jpg

设置分区器和重试时间

  • 从配置中读取分区器配,键是partitioner.class。如果设置的话可以通过properties.put("partitioner.class" ,"全类名")来设置,如果用户没有自定义分区器,这里将会使用DefaultPartitioner这个默认的分区器
  • 重试时间通过retry.backoff.ms这个键配置,默认是100ms

v2-3d2832a534f04e6af82996d59d074e96_b.png

设置序列化器

  • key是通过key.serializer来设置的
  • value是通过value.serializer来设置的

v2-2956eb832a6da22c5636cad188a42cc4_b.jpg

元数据

  • metadata.max.age.ms:Metadata数据的刷新间隔

v2-c987a054433071086e86296c892e8e88_b.png

消息大小、压缩格式设置

  • max.request.size:规定每条消息的大小,生产环境必须设置,可以设置为10M
  • compression.type: 数据压缩的类型
    • 默认为空(就是不压缩)。有效的值有 none,gzip,snappy, 或 lz4

v2-d82e29360bdf1ce76ae836e1e9d23e14_b.png

RecordAccumulator

累加器:

此类充当一个队列,将记录累积到要发送到服务器的MemoryRecords实例中。除非显式禁用此行为,否则累加器使用有限的内存量,并且当该内存耗尽时,追加调用将阻塞。

  • batch.size:默认是32M

v2-5936075e54f57ab7d1bc15fd1f1006c0_b.jpg

v2-3aaeb0f03ad85cd0951fec445ddf6bc3_b.png

NetworkClient

  • 用于异步请求/响应网络i/o的网络客户端。这是一个内部类,用于实现面向用户的生产者和使用者客户端。该类不是线程安全的!
  • connections.max.idle.ms
    • :默认值是9分钟,一个网络连接最多空闲多久,超过这个空闲时间,就关闭这个网络连接
  • max.in.flight.requests.per.connection
    • 默认是5, producer-> broker 发送数据的时候,其实是有多个网络连接。每个网络连接可以忍受producer端发送broker消息没有响应
    • 因为kafka有重试机制,所以有可能会造成数据乱序,如果要保证数据有序,这个值要设置为1
  • send.buffer.bytes
    • socket发送数据的缓冲区的大小,默认值是128k
  • receive.buffer.bytes
    • socket接受数据的缓冲区的大小,默认值是32K

v2-790be202d0c619758d7d731bcacab342_b.jpg

Sender

  • 处理向Kafka集群发送生产请求的后台线程。此线程发出元数据请求以更新其群集视图,然后将产生的请求发送到相应的节点。

v2-5bf049e2b714b86b9e57701e7ea7c7c0_b.jpg

总结

初始化的过程,主要是设置了一些配置,然后初始化了一些重要的类。从初始化的过程,我们也知道生产环境需要修改一些配置来满足生产的需求。

喜欢就点个关注呗!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值