我安装了孵化器卡夫卡图表。撰写本文时的kafka-0.8.5版本。
helm install --name kafka \
--set replicas=1 \
--set persistence.enabled=false \
--set zookeeper.replicaCount=1 \
incubator/kafka为了尝试这一点,我运行了一个单独的pod作为一个带有Kafka cli工具的bash shell。我使用的是与kafka-0 pod完全相同的Docker镜像confluentinc/cp-kafka:4.1.1-2,以便在客户端和服务器之间有一个完美的版本匹配:
kubectl run shell --rm -i --tty --image confluentinc/cp-kafka:4.1.1-2 -- /bin/bash列出主题、发布消息、获取主题偏移量都能完美地工作,如下所示。但是,当我尝试运行kafka-console-consumer并查看主题中的测试记录时,它无限期地挂起。为什么?
root@shell-5c6ddf5d99-tbsvm:/# /usr/bin/kafka-topics --zookeeper kafka-zookeeper:2181 --list
__confluent.support.metrics
root@shell-5c6ddf5d99-tbsvm:/# echo "abcxyz" | /usr/bin/kafka-console-producer --broker-list kafka:9092 --topic test-topic
>[2018-08-07 16:43:26,110] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 1 : {test-topic=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
root@shell-5c6ddf5d99-tbsvm:/# /usr/bin/kafka-topics --zookeeper kafka-zookeeper:2181 --list
__confluent.support.metrics
test-topic
root@shell-5c6ddf5d99-tbsvm:/# /usr/bin/kafka-run-class kafka.tools.GetOffsetShell --broker-list kafka:9092 --topic test-topic --time -1
test-topic:0:1
root@shell-5c6ddf5d99-tbsvm:/# /usr/bin/kafka-console-consumer --bootstrap-server kafka:9092 --from-beginning --topic test-topic
<hangs indefinitely>仅供参考,这是一个本地minikube开发集群,带有Kubernetes 1.10.x服务器端和1.10.x kubectl客户端工具的最新minikube。这是一个干净的,新的minikube,除了kafka,kafka-zookeeper和我的shell pod,没有其他东西在运行。
此外,编写一个小型Java客户端测试应用程序进行消费也会得到类似的结果,即无限期轮询,而不会有任何消息。当我的客户机订阅test-topic时,它永远不会收到分配给一个主题分区的通知回调。
发布于 2018-08-08 02:39:02
这花了我几个小时的时间,有一个bug in minikube阻止卡夫卡工作。
我不熟悉Helm部署,但您必须确保两件事。首先,Kafka通告的主机必须与您的Kubernetes服务IP (或kube DNS中的dns名称)相同,其次,您必须将minikube的网络接口设置为混杂模式:
minikube ssh sudo ip link set docker0 promisc on如果不这样做,kafka就不能通过Kubernetes服务来满足自己,它的领导人选举就会失败。我发现它在容器部署环境中非常脆弱。
https://stackoverflow.com/questions/51731858
复制相似问题