1. 引入 Kafka 依赖
在 pom.xml
文件中添加 Kafka 客户端的依赖:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.0.0</version>
</dependency>
2. 配置 Kafka 无需 Zookeeper 模式
在 Kafka 2.8.0 及更高版本中,可以选择不使用 Zookeeper 运行 Kafka。
配置文件 server.properties
:
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@localhost:9093
listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093
inter.broker.listener.name=PLAINTEXT
log.dirs=/tmp/kraft-combined-logs
3. 启动 Kafka 服务器
使用以下命令启动 Kafka 服务器:
kafka-server-start.sh config/server.properties
4. 创建 Kafka 主题
使用命令行工具创建主题:
kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
5. 配置 Kafka 生产者
编写 Kafka 生产者代码,用于发送消息:
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;
public class KafkaProducerExample {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
for (int i = 0; i < 10; i++) {
producer.send(new ProducerRecord<>("my-topic", Integer.toString(i), "message-" + i));
}
producer.close();
}
}
6. 配置 Kafka 消费者
编写 Kafka 消费者代码,用于接收消息:
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.time.Duration;
import java.util.Collections;
import java.util.Properties;
public class KafkaConsumerExample {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("my-topic"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
}
}
}
}
总结
- 引入 Kafka 依赖:在 Maven 项目中添加 Kafka 客户端依赖。
- 配置 Kafka:配置 Kafka 以无需 Zookeeper 模式运行。
- 启动 Kafka 服务器:使用配置启动 Kafka 服务器。
- 创建 Kafka 主题:使用命令行工具创建主题。
- 编写 Kafka 生产者代码:发送消息到 Kafka 主题。
- 编写 Kafka 消费者代码:从 Kafka 主题接收消息。
通过以上步骤,你可以在 Java 中成功配置并使用无需 Zookeeper 的 Kafka (KRaft 模式)。