新建Maven项目
1.点击“Create New Project”选项
2. 选择maven选项,选择JDK版本,“Create From Archetype”复选框可以不用选择 点击【Next】
3. 给项目起一个名字,“groupId”,“artifactId”,“version”可以更改,也可以默认,填写完之后,点击【Finish】
4.由于我配置了全局Maven,所以不用选择Maven路径,直接使用我本机默认的Maven仓库>
设置pom文件
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>KafkaProject</artifactId>
<version>1.0</version>
<properties>
<kafka.version>0.10.2.1</kafka.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.0.0</version>
</dependency>
<!-- kafka依赖 -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>${kafka.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
生产者代码
/**
* @Author Uzi
* @Date 2021/1/29 17:57
* @Version 1.0
*/
import java.util.Properties;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;
/**
*
* Title: producer.KafkaProducerTest
* Description:
* kafka 生产者demo
* Version:1.0.0
* @author pancm
* @date 2018年1月26日
*/
public class KafkaProducerTest implements Runnable {
private final KafkaProducer<String, String> producer;
private final String topic;
public KafkaProducerTest(String topicName) {
//创建Kafka生产者配置对象
Properties props = new Properties();
// 连接指定的kafka集群
props.put("bootstrap.servers", "172.16.3.153:9092,172.16.3.155:9092,172.16.3.156:9092");
// 设置ack应答级别
// acks=0:如果设置为0,生产者不会等待kafka的响应。
// acks=1:这个配置意味着kafka会把这条消息写到本地日志文件中,但是不会等待集群中其他机器的成功响应。
// acks=all:这个配置意味着leader会等待所有的follower同步完成。这个确保消息不会丢失,除非kafka集群中所有机器挂掉。这是最强的可用性保证。
props.put("acks", "all");
// 重试次数
// 配置为大于0的值的话,客户端会在消息发送失败时重新发送。
//props.put("retries", 3);
// 批次大小
props.put("batch.size", 16384);
// 等待时间
props.put("linger.ms", 1);
// RecordAccumulator 缓冲区大小
props.put("buffer.memory", 33554432);
props.put("key.serializer", StringSerializer.class.getName());
props.put("value.serializer", StringSerializer.class.getName());
this.producer = new KafkaProducer<String, String>(props);
this.topic = topicName;
}
@Override
public void run() {
int messageNo = 1;
try {
for(;;) {
String messageStr="你好,这是第"+messageNo+"条数据";
producer.send(new ProducerRecord<String, String>(topic, "Message", messageStr));
//生产了10条就打印
if(messageNo%10==0){
System.out.println("发送的信息:" + messageStr);
}
//生产200条就退出
if(messageNo%200==0){
System.out.println("成功发送了"+messageNo+"条");
break;
}
messageNo++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
producer.close();
}
}
public static void main(String args[]) {
KafkaProducerTest test = new KafkaProducerTest("mytest");
Thread thread = new Thread(test);
thread.start();
}
}