1.发送原理
producer发送原理主要分为两步,第一步是构建producer对象,第二步是发送消息,详细步骤如下图所示。
(1).首先要构造一个ProducerRecord对象,该对象可以声明主题(topic)、分区(partition)、键(key)以及值(value),主题和值是必须要声明的,分区和键可以不用指定。
(2).调用send()方法进行消息发送。
(3).因为消息要到网络上进行传输,所以必须进行序列化,序列化器的作用就是把消息的key和value对象序列化成字节数组。
(4).接下来数据传到分区器,如果之前的ProducerRecord对象指定了分区,那么分区器将不再做任何事,直接把指定的分区返回。如果没有,那么分区器会根据key来选择一个分区,选择好分区之后,生产者就知道该往哪个主题和分区发送消息了。
(5).接着这条记录会被添加到一个记录批次里面,这个批次里所有的消息会被发送到相同的主题和分区。会有一个独立的线程来把这些记录批次发送到相应的broker上。
(6).broker成功接收到消息,表示发送成功,返回消息的元数据(包括主题、分区信息以及记录在分区里的偏移量)。发送失败,可以选择重试或者直接抛出异常。