12、Kafka ------ Kafka 生产者API 用法(代码演示生产者发送消息到指定主题)

发布时间:2024年01月21日

Kafka 生产者API 用法(代码演示)

生产者API 介绍


依赖:

在这里插入图片描述

<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的消息。

Kafka 的API 文档

在这里插入图片描述

使用生产者API发送消息步骤:

使用生产者API发送消息很简单,基本只要两步:

1、创建KafkaProducer对象,创建该对象时要传入Properties对象,用于对该生产者进行配置。

2、调用KafkaProducer对象的send()方法发送消息,调用ProducerRecord的构造器即可创建不同的消息。

3、发送完成后,关闭KafkaProducer对象。



为何 Kafka 的 KafkaProducer 需要一个 Properties 来创建KafkaProducer ?

因为Kafka的Producer API提供了海量的配置选项——如果你将这些配置选项每个都定义成方法,那将是一件让人无比痛苦的事情。

所以Kafka在设计该API时,就直接用了一个Properties来封装所有的配置属性。



生产者发送消息代码演示:


1、创建一个Maven项目

在这里插入图片描述

在这里插入图片描述



2、依赖

Producer API

<dependency>
	<groupId>org.apache.kafka</groupId>
	<artifactId>kafka-clients</artifactId>
	<version>3.6.1</version>
</dependency>

在这里插入图片描述



3、代码

可以到API文档查找消息发送者的示例:

KafkaProducer

在这里插入图片描述

如图:

创建一个消息生产者对象,发送20条消息到 test2 主题中去,前10条消息发送带key的消息,后10条消息发送不带key的消息。

在这里插入图片描述

在这里插入图片描述



4、演示结果

控制台显示发送消息成功,然后再打开小黑窗看具体命令
在这里插入图片描述

打开小黑窗,输入这些命令,查看指定主题下的所有消息:

▲ 监听 【指定主题】 的所有消息:
这个监听命令,运行后是一直存在的,会一直监听,有新消息会马上监听出来的。

 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,所以这边就乱码吗,这是正常现象。

在这里插入图片描述



5、一些参数理解

acks:Kafka的消息确认机制:

在这里插入图片描述

在这里插入图片描述



linger.ms:两条消息发送之间间隔等待的时间

linger.ms 是 Kafka中的一个配置属性,用于控制生产者在发送消息之前等待的时间。它表示发送消息的延迟时间(以毫秒为单位)。当生产者调用send()方法发送消息时,如果有未发送的消息存在,并且距离上一次发送消息的时间小于linger.ms,则会等待一段时间再发送

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_44411039/article/details/135709715
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。