在 Debian 上“连接 Kafka”通常分几种情况,下面按最常见场景给你说明,基本都适用(Debian 10/11/12 通用)。
sudo apt update
sudo apt install -y default-jdk
java -version
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz
cd kafka_2.13-3.7.0
Kafka 3.x 推荐 KRaft(无 Zookeeper)
# 生成集群ID
KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
# 格式化
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
# 启动
bin/kafka-server-start.sh config/kraft/server.properties
bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092
bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092
确保能访问:
9092(PLAINTEXT)9093(SSL / SASL)telnet kafka-host 9092
Kafka 的 advertised.listeners 必须能被客户端解析
服务端 server.properties:
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://kafka-host:9092
客户端连接:
bin/kafka-console-consumer.sh \
--topic test \
--bootstrap-server kafka-host:9092
⚠️ 不能用 IP 连但 advertised 是 hostname,否则会连不上
pip install kafka-python
from kafka import KafkaProducer
producer = KafkaProducer(
bootstrap_servers='kafka-host:9092'
)
producer.send('test', b'hello debian')
producer.flush()
pom.xml:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.7.0</version>
</dependency>
Properties props = new Properties();
props.put("bootstrap.servers", "kafka-host:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
| 问题 | 原因 |
|---|---|
| Connection refused | Kafka 没启动 / 端口错 |
| Leader not available | topic 没创建成功 |
| 能连但收不到消息 | advertised.listeners 错 |
| 超时 | 防火墙 / 安全组 |
如果你能告诉我:
我可以直接给你一份可复制的配置。