我是靠谱客的博主 多情树叶,最近开发中收集的这篇文章主要介绍Kafka 生产者一、kafka生产者原理二、kafka异步发送 三、kafka生产者分区四、生产者提高吞吐量五、数据的可靠性五、数据重复六、数据有序、乱序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、kafka生产者原理

二、kafka异步发送

配置kafka

创建对象,发送数据

带回调函数的异步发送

同步发送

 

三、kafka生产者分区

分区策略

指定分区:

 指定key:

什么都不指定:

自定义分区器

四、生产者提高吞吐量

五、数据的可靠性

ACK应答级别

数据完全可靠条件

可靠性总结

代码中配置ACK

五、数据重复

幂等性

生产者事务

六、数据有序、乱序

数据有序

数据乱序


 

一、kafka生产者原理

main线程中创建生产者对象,然后调用send方法来发送数据,根据生产环境的需求来判断是否要增加拦截器(一般建议不用),因为是跨节点通信,所以要对数据进行序列化,用kafka自带的序列化器处理,再由分区器来规定数据发送到哪个分区,先发送到了一个缓存队列当中,队列大小是32M,其中每个批次默认大小是16k,达到16k后就会进入sender线程发送到kafka集群,或者等待时间到了也会自动发送,每一个broker节点接受一个队列的消息,发送到分区后,分区最多缓存5个请求,如果达到5个请求都没有ack应答的话,那么接下来消息就会发送到别的分区上。

通过Selector将底层链路进行打通进行发送数据,集群收到后进行一个副本的同步,同步完成后进行ack应答。

 

应答成功后清理队列中的数据

 应答失败会进行retry重试

 

二、kafka异步发送

 

 创建Maven工程导入kafka客户端依赖

 导包

配置kafka

创建对象,发送数据

 

带回调函数的异步发送

 

同步发送

 

 

三、kafka生产者分区

分区策略

 

指定分区:

 

 指定key:

什么都不指定:

 

怎么把订单表的数据发送到kafka的指定分区中?

      key 上写表名,表名的hashcode值一定会发送到同一个分区(生产环境通常将表名作为key)

自定义分区器

 

 

 在生产者中关联自定义分区器

 在生产环境中可以过滤一些脏数据!

四、生产者提高吞吐量

压缩类型:

 

五、数据的可靠性

ACK应答级别

0的时候,数据发过来还没落盘就应答,结果leader挂了导致了数据丢失。

 

 1的时候,数据发送过来,leader落盘后就会应答,生产者收到ack应答认为信息已经发送成功,随后就会清除掉队列中的消息,但是此时follwer可能还没完成同步,这个时候leader挂掉,就会有一个follwer成为新的leader,可是生产者已经认为信息发送成功从队列中清除了消息,这就导致了数据的丢失。

 

-1(all):leader收到消息,并且所有follwer都完成消息同步后返回ack应答

follwer挂掉的话,等时间达到阈值还没向Leader发送通信请求或同步数据就会被踢出ISR,意味着这个follwer就不是有效副本了

 

 

 

 上面几种都有数据丢失的风险,如何真正保护数据的可靠性呢?

数据完全可靠条件

ack级别设置为-1,且至少1个leader+1个follwer,ISR里min.insync.replicas >= 2

 

可靠性总结

 

代码中配置ACK

 

五、数据重复

幂等性

 

 

生产者事务

 

 

 

六、数据有序、乱序

数据有序

数据乱序

 

最后

以上就是多情树叶为你收集整理的Kafka 生产者一、kafka生产者原理二、kafka异步发送 三、kafka生产者分区四、生产者提高吞吐量五、数据的可靠性五、数据重复六、数据有序、乱序的全部内容,希望文章能够帮你解决Kafka 生产者一、kafka生产者原理二、kafka异步发送 三、kafka生产者分区四、生产者提高吞吐量五、数据的可靠性五、数据重复六、数据有序、乱序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部