「Kafka核心设计与实践原理」-生产者原理

KafkaProducer<String, String> producer = new KafkaProducer<>(properties, new StringSerialiser(), new StringSerialiser());

内部原理其实一样

消息的发送

=========

属性

======

「Kafka核心设计与实践原理」-生产者原理

构造方法

========

「Kafka核心设计与实践原理」-生产者原理

发送消息的三种模式

=============

发后即忘(fire-and-forget)

=========================

它只管往Kafka发送消息而并不关心消息是否正确到达。在大多数情况下,这种方式没有什么问题,不过在某些时候(比如发生不可重试异常)会造成消息的丢失。这种发送方式的性能最高,可靠性最差。

同步(sync)

============

「Kafka核心设计与实践原理」-生产者原理

KafkaProducer的send方法并非是void类型,而是Future类型 通过get方法阻塞等待Kafka的响应,直到消息发送成功,或者发生异常。发生异常,捕获,交由外界处理

不可重试异常:不会进行任何重试,直接抛出,如RecordToolLargeException,所发消息太大; 可重试异常:如果配置了retries参数,那么只要在规定的重试次数内自行恢复,就不会抛出异常。 如: properties.put(ProducerConfig.RETRIES_CONFIG, 10);

可靠性高,要么成功,要么异常,性能差很多,需要阻塞等待一条信息发送完之后才能发送下一条。

异步(async)

=============

「Kafka核心设计与实践原理」-生产者原理

一般是在send()方法里指定一个Callback的回调函数,Kafka在返回响应时调用该函数来实现异步的逻辑处理。

onCompletion()方法里的参数是互斥的。

拓展

======

「Kafka核心设计与实践原理」-生产者原理

producer.send(record1, callback1); producer.send(record2, callback2);

对于一个分区而言,如果消息record1先于消息record2发送,那么KafkaProducer就可以保证callback1先于 callback2调用,也就是说,回调函数的调用可以保证分区有序。

关闭

======

「Kafka核心设计与实践原理」-生产者原理

producer.close();

KafkaProducer不会只负责发送单条消息,更多的是发送多条消息,发送完后,需要调用close()方> 法来回收资源。

close()方法会阻塞等待之前所有的发送请求完成后在关闭KafkaProducer。

序列化

=======

「Kafka核心设计与实践原理」-生产者原理

configure()方法用来配置当前类

serialize()方法用来执行序列化操作

close()方法用来关闭当前的序列化器

分区器

=======

消息通过send()方法发往broker的过程中,有可能需要经过拦截器(Interceptor)、序列化器(Serializer) 和分区器(Partitioner)的一系列作用后才能被真正地发往broker。

消息经过序列化后就需要确定发往哪个分区,如果消息ProducerRecord中指定了partition字段,> 那么就不需要分区器的作用。

Partitioner

===============

「Kafka核心设计与实践原理」-生产者原理

最后

俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!

另外,给大家安排了一波学习面试资料:

image

image

以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!
,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!

另外,给大家安排了一波学习面试资料:

[外链图片转存中…(img-AD6EFvTV-1719178310864)]

[外链图片转存中…(img-jbxRT18X-1719178310865)]

以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值