Java 如何在《库伯内特斯》中创作简单的卡夫卡
我的任务是用kubernetes中的kafka创建一个应用程序。但当我将消费者连接到卡夫卡时,我发现了一个错误: 警告1---[ntainer#0-0-C-1]org.apache.kafka.clients.NetworkClient:[Consumer clientId=Consumer-test-1,groupId=test]无法建立到节点1(kafka service/10.99.233.131:9092)的连接。经纪人可能不在 警告1---[ntainer#0-0-C-1]org.apache.kafka.clients.NetworkClient:[消费者客户端id=Consumer-test-1,组id=test]引导代理kafka服务:9092(id:-1机架:null)已断开 这是我为kubernetes准备的yaml文件:Java 如何在《库伯内特斯》中创作简单的卡夫卡,java,kubernetes,apache-kafka,Java,Kubernetes,Apache Kafka,我的任务是用kubernetes中的kafka创建一个应用程序。但当我将消费者连接到卡夫卡时,我发现了一个错误: 警告1---[ntainer#0-0-C-1]org.apache.kafka.clients.NetworkClient:[Consumer clientId=Consumer-test-1,groupId=test]无法建立到节点1(kafka service/10.99.233.131:9092)的连接。经纪人可能不在 警告1---[ntainer#0-0-C-1]org.ap
apiVersion: v1
kind: Service
metadata:
name: kafka-service
labels:
name: kafka
spec:
ports:
- port: 9092
targetPort: 9092
protocol: TCP
selector:
name: kafka
---
apiVersion: v1
kind: Service
metadata:
name: zookeeper-service
labels:
name: zookeeper
spec:
ports:
- name: client
port: 2181
protocol: TCP
- name: follower
port: 2888
protocol: TCP
- name: leader
port: 3888
protocol: TCP
selector:
name: zookeeper
type: LoadBalancer
---
apiVersion: v1
kind: Pod
metadata:
name: zookeeper
labels:
name: zookeeper
spec:
containers:
- name: zookeeper
image: zookeeper:3.7.0
---
apiVersion: v1
kind: Pod
metadata:
name: kafka
labels:
name: kafka
spec:
containers:
- name: kafka
image: wurstmeister/kafka:2.13-2.6.0
imagePullPolicy: "IfNotPresent"
env:
- name: KAFKA_ADVERTISED_PORT
value: "666"
- name: KAFKA_ADVERTISED_HOST_NAME
value: localhost
- name: KAFKA_ZOOKEEPER_CONNECT
value: zookeeper-service:2181
- name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
value: INSIDE:PLAINTEXT
- name: KAFKA_ADVERTISED_LISTENERS
value: INSIDE://:666
- name: KAFKA_LISTENERS
value: INSIDE://:666
- name: KAFKA_INTER_BROKER_LISTENER_NAME
value: INSIDE
ports:
- containerPort: 9092
简单java代码:
@Service
public class Consumer {
@KafkaListener(topics = "new-topic",groupId = "test")
public void consumeMessage(String message){
System.out.println("************************");
System.out.println(message);
System.out.println("************************");
}
}
如何创建kafka broker而不只是为了测试而扩展?这篇文章对我很有帮助: 我将yaml文件更改为:
apiVersion: v1
kind: Pod
metadata:
name: kafka-service
labels:
name: kafka-service
spec:
containers:
- name: kafka-service
image: wurstmeister/kafka:2.13-2.6.0
imagePullPolicy: "IfNotPresent"
env:
- name: KAFKA_ZOOKEEPER_CONNECT
value: zookeeper-service:2181
- name: KAFKA_BROKER_ID
value: "1"
- name: KAFKA_LISTENERS
value: IN://:9092,OUT://:9093
- name: KAFKA_ADVERTISED_LISTENERS
value: IN://localhost:9092,OUT://kafka-service:9093
- name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
value: IN:PLAINTEXT,OUT:PLAINTEXT
- name: KAFKA_INTER_BROKER_LISTENER_NAME
value: IN
这意味着kubernetes网络内的端口9093öpen和从主机打开的端口9092。
在这之后,所有工作都正常。从这里开始无论如何,您似乎误解了您设置的环境变量
KAFKA_播发_侦听器
优先于KAFKA_播发_端口
和主机名。既然您已经将侦听器端口设置为666,那么就没有可以在客户端中使用的容器端口9092