以下测试皆在windows下进行,请根据自己情况酌情配置kafka zookeeper等环境
本人使用的是jdk11,代码中可能存在jdk9的新特性,使用jdk9以前的jdk的朋友请自行转换
kafka环境变量等暂时略过
1.java导入依赖
<!--导入kafka依赖-->
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.13</artifactId>
<version>2.8.0</version>
</dependency>
kafka Producer
导入相关依赖后,创建测试类ProducerDemo;
-
创建生产者对象
使用KafkaProducer 创建kafka生产者对象,这时可以发现kafka不允许我们使用空构造来创建对象;
那么我们就选用传入properties的方式创建kafka生产者
创建生产者的时候,跟控制台命令一样,我们需要指定集群名称以及序列化器,而这些相关设置都会存储在我们的配置文件中;
kafka给我们提供了ProducerConfig类,并在其中已经给我们提前准备好了我们所需要的key,在向properties中put键值时,可以直接使用producerConfig的静态常量作为key;并传入相应value
-
向kafka中发送信息
使用kafkaProducer向kafka中发送信息,可以使用其提供的send()方法 ;使用时可以看到其需要传入ProducerRecord以及一个可选的Callback
ProducerRecord: 即为每条数据所封装成的对象
CallBack:可选;获取函数的回调
-
close()
在真实生产环境中,我们可能不需要手动调用close方法关闭kafkaProducer,但是目前的测试阶段,如果不使用close关闭,可能会导致发送的信息在设置等待的时间内,不会被真正的发送;
流在关闭的时候会对数据进行回收操作
/**
* 描述:kafkaProducer生产者
*
* <pre>
* HISTORY
* ****************************************************************************
* ID DATE PERSON REASON
* 1 2021/8/10 23:14 Bambi Create
* ****************************************************************************
* </pre>
*
* @author Bambi
* @since 1.0
*/
public class ProducerPartitionerDemo01 {
public static void main(String[] args) {
Properties properties = new Properties();
//自行修改为对应的集群地址 kafka默认为9092,此处我没有更改
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
//需要传入序列化器的全类名