首先pom文件中引用如下依赖
<!-- ===========KAFKA=============== -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.12</artifactId>
<version>2.2.0</version>
</dependency>
新建一个KafkaProcedureTest类
package com.sss.demo.Kafka;
import java.util.Properties;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;
public class KafkaProducerSimple {
public static void main(String[] args) {
// Generate total consecutive events starting with ufoId
long total = Long.parseLong("10");
long ufoId = Math.round(Math.random() * Integer.MAX_VALUE);
// Set up client Java properties
Properties props = new Properties();
props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
"cdh02:9092,cdh03:9092,cdh01:9092");
props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
StringSerializer.class.getName());
props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
StringSerializer.class.getName());
props.setProperty(ProducerConfig.ACKS_CONFIG, "1");
try (KafkaProducer<String, String> producer = new KafkaProducer<>(props)) {
int i = 0;
while (true){
try {
ProducerRecord<String, String> data = new ProducerRecord<String, String>("testTopic", String.valueOf(i++), "Generate Test : "+String.valueOf(i++));
Thread.sleep(1000);
producer.send(data);
long wait = Math.round(Math.random() * 25);
Thread.sleep(wait);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
接着去集群中启动KAFKA并创建testTopic
[root@cdh03 ~]#kafka-topics --create --zookeeper cdh01/kafka cdh02:2181/kafka cdh03:2181/kafka --replication-factor 3 --partitions 3 --topic testTopic
然后再去创建一个消费者
[root@cdh03 ~]#kafka-console-consumer --bootstrap-server cdh01:9092 cdh02:9092 cdh03:9092 --topic testTopic --from-beginning
启动java项目Run起来,你在消费者控制台发现以下输出
关于配置参数设置
acks=0
如果设置为零,则生产者不会等待来自服务器的任何确认。该记录将被立即添加到套接字缓冲区并被视为已发送。在这种情况下,retries不能保证服务器已经收到记录,并且配置不会生效(因为客户端通常不会知道任何故障)。为每个记录返回的偏移量将始终设置为-1。
acks=1
这意味着领导者会将记录写入其本地日志中,但会在未等待所有追随者完全确认的情况下作出响应。在这种情况下,如果领导者在承认记录后但在追随者复制之前立即失败,那么记录将会丢失。
acks=all
这意味着领导者将等待全套的同步副本确认记录。这保证只要至少有一个同步副本保持活动状态,记录就不会丢失。这是最强有力的保证。这相当于acks = -1设置。