设置
笔记本电脑with:-
virtualbox虚拟机中的kafka:从笔记本电脑的本地主机转发的vagrant 9092端口
virtualbox vm中的kubernetes集群:minikube
期望的结果
我的minikube集群上的微服务可以向kafka vm发送消息。请注意,这在google容器引擎(gke)中有效
实际结果
从笔记本电脑,我可以使用控制台生产者发送消息到Kafka虚拟机和它高兴地加入这些主题。但是当来自kubernetes集群的微服务发送一条消息时,该消息被接收,但不会被添加到主题中。
相反,我得到了微服务上的错误。。。
Batch containing 1 record(s) expired due to timeout while requesting metadata from brokers for generated-test-script-0
如果我跟踪kafka-request.log,我会看到。。。
[2017-02-08 21:57:05,891] TRACE Completed request:{api_key=3,api_version=1,correlation_id=0,client_id=producer-5} -- {topics=[generated-test-script]} from connection 10.0.2.15:9092-10.0.2.2:50124;totalTime:0,requestQueueTime:0,localTime:0,remoteTime:0,responseQueueTime:0,sendTime:0,securityProtocol:PLAINTEXT,principal:User:ANONYMOUS (kafka.request.logger)
而在“成功”的情况下,当我在笔记本电脑上使用一个控制台生产者时,我看到两行。1同上,但我猜另一个ack。。。
[2017-02-08 22:08:12,764] TRACE Completed request:{api_key=3,api_version=2,correlation_id=0,client_id=console-producer} -- {topics=[test]} from connection 10.0.2.15:9092-10.0.2.2:50748;totalTime:6,requestQueueTime:0,localTime:6,remoteTime:0,responseQueueTime:0,sendTime:0,securityProtocol:PLAINTEXT,principal:User:ANONYMOUS (kafka.request.logger)
[2017-02-08 22:08:13,799] TRACE Completed request:{api_key=0,api_version=2,correlation_id=1,client_id=console-producer} -- {acks=1,timeout=1500,topic_data=[{topic=test,data=[{partition=0,record_set=java.nio.HeapByteBuffer[pos=0 lim=39 cap=39]}]}]} from connection 10.0.2.15:9092-10.0.2.2:53696;totalTime:22,requestQueueTime:1,localTime:21,remoteTime:0,responseQueueTime:0,sendTime:0,securityProtocol:PLAINTEXT,principal:User:ANONYMOUS (kafka.request.logger)
结论与思考
因此,在kafka服务器端没有这样的错误,只是在客户端。我猜这是一个网络问题设置(nat?)虚拟kubernetes集群中的microseric可以与我的kafka vm对话,但是应答路由被丢弃了?
kafka需要在第一次发送的消息中返回元数据,因此将batch size==0或“acks”=0设置为hack实际上没有帮助,因为最初需要将此元数据发送回。
任何想法或指针将是伟大的,因为我真的想运行这个集群和kafka虚拟机本地开发工作。
暂无答案!
目前还没有任何答案,快来回答吧!