在第一篇博客我们了解到一个kafka系统,通常是生产者Producer 将消息发送到 Broker,然后消费者 Consumer 去 Broker 获取,那么本篇博客我们来介绍什么是生产者Producer。
1、生产者概览我们知道一个系统在运行过程中会有很多消息产生,比如前面说的对于一个购物网站,通常会记录用户的活动,网站的运行度量指标以及一些日志消息等等,那么产生这些消息的组件我们都可以称为生产者。
而对于生产者产生的消息重要程度又有不同,是否都很重要不允许丢失,是否允许丢失一部分?以及是否有严格的延迟和吞吐量要求?
对于这些场景在 Kafka 中会有不同的配置,以及不同的 API 使用。
2、生产者发送消息步骤下图是生产者向 Kafka 发送消息的主要步骤:
①、首先要构造一个 ProducerRecord 对象,该对象可以声明主题Topic、分区Partition、键 Key以及值 Value,主题和值是必须要声明的,分区和键可以不用指定。
②、调用send() 方法进行消息发送。
③、因为消息要到网络上进行传输,所以必须进行序列化,序列化器的作用就是把消息的 key 和 value对象序列化成字节数组。
④、接下来数据传到分区器,如果之间的 ProducerRecord 对象指定了分区,那么分区器将不再做任何事,直接把指定的分区返回;如果没有,那么分区器会根据 Key 来选择一个分区,选择好分区之后,生产者就知道该往哪个主题和分区发送记录了。
⑤、接着这条记录会被添加到一个记录批次里面,这个批次里所有的消息会被发送到相同的主题和分区。会有一个独立的线程来把这些记录批次发送到相应的 Broker 上。
③、Broker成功接收到消息,表示发送成功,返回消息的元数据(包括主题和分区信息以及记录在分区里的偏移量)。发送失败,可以选择重试或者直接抛出异常。
3、Java Producer API首先在POM 文件中导入 kafka client。
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.0.0</version> </dependency>