Kafka之producer的执行

一、producer的执行过程

producer包含几个部分
1.初始化
2.发送流程
3.缓存区
4.IO处理

其中初始化包含以下几个阶段:
1)设置分区器
2)设置重试参数
3)设置序列化器
4)设置拦截器
5)执行累加器
6)初始化元数据(topic,partition等)
7)执行send()方法
9)启动IO Thread,运行runnable

发送过程包含以下几个阶段:
1)执行拦截器
2)序列化处理
3)分区处理
4)把消息写入缓冲区

二、producer的优化

1.发送确认的acks机制:在集群模式下,需满足acks指定的条件,才会认为消息成功写入Kafka
三种模式
1)acks=0 只要发出去,就认为消息已经写入kafka
2)acks=1 写入分区的副本 只要写入一个就返回确认
3)acks=all或者-1 全部的副本都收到了,就返回确认。其中全部的副本不是真正物理意义的全部副本,而是指 min.insync.repilcas参数的值,即 全部等价于 min.insync.repilcas
例如 一个集群共有5台brokers 当acks=all min.insync.repilcas=3 则 当同步数达到3时 返回确认

若追求性能 min.insync.replicas =1 leader同步成功返回成功 (当leader宕机 ,必然丢失数据)
min.insync.replicas =3 3个副本的服务器同步成功则返回成功,这个是集群下相对稳妥的方案

2.max.request.size默认1M 建议适当调大10M
3.retries失败重试次数 默认0 不重试,建议改为2或者3
4.compression.type 默认是没有压缩
5.Buffer.memory 缓冲区的大小 默认值是32M 建议可以调大,代价是占用客户端的内存
6.batch.size 发送到缓存冲的消息被封装成一个batch的大小,默认是16kb 建议生产时可以适当调大
7.linger.ms 发送到broker的延迟,延迟越大 发送频率越低,效率越高,但实时性越低。实际发送的触发条件取决于batch.size 和linger.ms 通过决定 (体量到达batch.size或者时间达到linger.ms后发送到broker)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值