在 Ubuntu 下使用 Kafka,通常分为 Kafka 连接 Kafka(生产/消费) 和 客户端连接 Kafka 两种情况。下面从最常见场景一步步说明。
wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -xzf kafka_2.13-3.6.1.tgz
cd kafka_2.13-3.6.1
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
✅ 默认 Kafka 监听:
localhost:9092
bin/kafka-topics.sh \
--create \
--topic test-topic \
--bootstrap-server localhost:9092 \
--partitions 1 \
--replication-factor 1
bin/kafka-console-producer.sh \
--topic test-topic \
--bootstrap-server localhost:9092
输入消息后回车即可发送。
bin/kafka-console-consumer.sh \
--topic test-topic \
--from-beginning \
--bootstrap-server localhost:9092
✅ 到这一步,本地 Kafka 已成功连接。
Kafka 默认只监听 localhost,远程无法连接。
server.propertiesvim config/server.properties
✅ 关键配置:
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://<服务器公网IP>:9092
例如:
advertised.listeners=PLAINTEXT://192.168.1.100:9092
然后重启 Kafka:
bin/kafka-server-stop.sh
bin/kafka-server-start.sh -daemon config/server.properties
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.6.1</version>
</dependency>
Properties props = new Properties();
props.put("bootstrap.servers", "192.168.1.100:9092");
props.put("key.serializer",
"org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer",
"org.apache.kafka.common.serialization.StringSerializer");
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("test-topic", "hello kafka"));
producer.close();
Properties props = new Properties();
props.put("bootstrap.servers", "192.168.1.100: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(List.of("test-topic"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
records.forEach(r -> System.out.println(r.value()));
}
sudo ufw allow 9092
advertised.listeners 配置错误localhosttail -f logs/server.log
| 场景 | 连接方式 |
|---|---|
| 本地 | localhost:9092 |
| 远程 | 修改 advertised.listeners |
| Java | bootstrap.servers |
| 命令行 | kafka-console-producer/consumer.sh |
如果你能告诉我:
我可以给你更精确的配置示例。