Kafka 生产者

目录

一、kafka生产者原理

二、kafka异步发送

配置kafka

创建对象,发送数据

带回调函数的异步发送

同步发送

 

三、kafka生产者分区

分区策略

指定分区:

 指定key:

什么都不指定:

自定义分区器

四、生产者提高吞吐量

五、数据的可靠性

ACK应答级别

数据完全可靠条件

可靠性总结

代码中配置ACK

五、数据重复

幂等性

生产者事务

六、数据有序、乱序

数据有序

数据乱序


 

一、kafka生产者原理

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

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

Kafka 生产者_第1张图片

 

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

Kafka 生产者_第2张图片

 应答失败会进行retry重试

Kafka 生产者_第3张图片

 

二、kafka异步发送

Kafka 生产者_第4张图片

 Kafka 生产者_第5张图片

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

Kafka 生产者_第6张图片

 导包

配置kafka

Kafka 生产者_第7张图片

创建对象,发送数据

Kafka 生产者_第8张图片

 

带回调函数的异步发送

Kafka 生产者_第9张图片

 

同步发送

Kafka 生产者_第10张图片

 

 

三、kafka生产者分区

Kafka 生产者_第11张图片

分区策略

Kafka 生产者_第12张图片

Kafka 生产者_第13张图片

 Kafka 生产者_第14张图片

指定分区:

 

 指定key:

什么都不指定:

Kafka 生产者_第15张图片

 

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

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

自定义分区器

Kafka 生产者_第16张图片

 Kafka 生产者_第17张图片

Kafka 生产者_第18张图片

 Kafka 生产者_第19张图片

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

Kafka 生产者_第20张图片

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

四、生产者提高吞吐量

压缩类型:

 Kafka 生产者_第21张图片

五、数据的可靠性

ACK应答级别

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

Kafka 生产者_第22张图片

 

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

Kafka 生产者_第23张图片

 

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

Kafka 生产者_第24张图片

Kafka 生产者_第25张图片

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

 Kafka 生产者_第27张图片

 

 

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

数据完全可靠条件

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

 

可靠性总结

Kafka 生产者_第28张图片

 

代码中配置ACK

Kafka 生产者_第29张图片

 

五、数据重复

Kafka 生产者_第30张图片

幂等性

Kafka 生产者_第31张图片

 Kafka 生产者_第32张图片

 

生产者事务

Kafka 生产者_第33张图片

 Kafka 生产者_第34张图片

Kafka 生产者_第35张图片 

 

六、数据有序、乱序

数据有序

Kafka 生产者_第36张图片

数据乱序

Kafka 生产者_第37张图片

 

你可能感兴趣的:(kafka学习记录,kafka,java,分布式)