<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.6.1</version>
</dependency>
生产者API 的核心类是 KafkaProducer,它提供了一个 send()方法 来发送消息,该方法需要传入一个 ProducerRecord<K,V>对象。
ProducerRecord 代表了一条消息,Kafka 的消息是包含了key、value、timestamp。
ProducerRecord定义了如下6个构造器:
- ProducerRecord(String topic, Integer partition, K key, V value):
创建一条发送到指定主题和指定分区的消息。
- ProducerRecord(String topic, Integer partition, K key, V value, Iterable<Header> headers):
创建一条发送到指定主题和指定分区的消息,且包含多个消息头。
- ProducerRecord(String topic, Integer partition, Long timestamp, K key, V value):
创建一条发送到指定主题和指定分区的消息,且使用给定的时间戳。
- ProducerRecord(String topic, Integer partition, Long timestamp, K key, V value, Iterable<Header> headers):
创建一条发送到指定主题和指定分区的消息、使用给定的时间戳,且包含多个消息头。
- ProducerRecord(String topic, K key, V value):
创建一条发送到指定主题的消息。
- ProducerRecord(String topic, V value):
创建一条发送到指定主题的、只带value,不带key的消息。
使用生产者API发送消息很简单,基本只要两步:
1、创建KafkaProducer对象,创建该对象时要传入Properties对象,用于对该生产者进行配置。
2、调用KafkaProducer对象的send()方法发送消息,调用ProducerRecord的构造器即可创建不同的消息。
3、发送完成后,关闭KafkaProducer对象。
为何 Kafka 的 KafkaProducer 需要一个 Properties 来创建KafkaProducer ?
因为Kafka的Producer API提供了海量的配置选项——如果你将这些配置选项每个都定义成方法,那将是一件让人无比痛苦的事情。
所以Kafka在设计该API时,就直接用了一个Properties来封装所有的配置属性。
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.6.1</version>
</dependency>
可以到API文档查找消息发送者的示例:
如图:
创建一个消息生产者对象,发送20条消息到 test2 主题中去,前10条消息发送带key的消息,后10条消息发送不带key的消息。
控制台显示发送消息成功,然后再打开小黑窗看具体命令
打开小黑窗,输入这些命令,查看指定主题下的所有消息:
▲ 监听 【指定主题】 的所有消息:
这个监听命令,运行后是一直存在的,会一直监听,有新消息会马上监听出来的。
kafka-console-consumer --bootstrap-server localhost:9092 ^
--topic test2 ^
--from-beginning ^
--property print.timestamp=true ^
--property print.key=true ^
--property print.offset=true ^
--property print.partition=true
可以看到,20条消息成功发送到 test2 主题的分区中,带key的消息发送到分区2中,不带key的消息发送到分区1中。
windows窗口的字符集是GBK,代码设置的是UTF-8,所以这边就乱码吗,这是正常现象。
acks:Kafka的消息确认机制:
linger.ms:两条消息发送之间间隔等待的时间
linger.ms 是 Kafka中的一个配置属性,用于控制生产者在发送消息之前等待的时间。它表示发送消息的延迟时间(以毫秒为单位)。当生产者调用send()方法发送消息时,如果有未发送的消息存在,并且距离上一次发送消息的时间小于linger.ms,则会等待一段时间再发送