docker和virtualbox虚拟机中的ApacheKafka

sqougxex  于 2021-06-07  发布在  Kafka
关注(0)|答案(0)|浏览(247)

我正在尝试在虚拟机中使用apache kafka,也就是一个可以与docker(wurstmeister/kafka docker)连接的版本,并通过vm的主机系统连接到docker中的kafka代理。
我将更详细地描述设置:
我的主机系统是一个运行在“普通”计算机上的ubuntu 64位14.04.3 lts(内核3.13)。我有一个完整而复杂的各种码头集装箱相互作用的结构。为了不干扰,或者更好地说,为了封装整个结构,不能直接在主机系统上运行docker映像。另一个原因是主机上需要不同的python库,这会干扰docker compose所需的python lib版本(用于启动不同的docker映像)。
因此,理想的解决方案应该是在virtualbox(guest系统:ubuntu16.04.1lts)上设置一个虚拟机,并在这个vm中完全运行docker环境。这有一个明显的优点,即vm本身可以根据docker结构的要求进行精确配置。
如上所述,docker图像之一提供了kafka和zookeeper功能,用于通信和消息传递。这意味着.yaml文件(它设置了一个运行此映像的容器)将kafka和zookeeper的所有必要端口转发到docker环境的主机系统(这是virtualbox vm的访客系统)。为了使docker环境在主机系统中可见,我在virtualbox中转发了所有的网络端口设置(网络->适配器nat->高级->端口转发)。系统的行为如下:
当我运行docker环境(包括kafka)时,我可以从vmkafka连接、使用和生成,vmkafka使用推荐的标准kafka shell脚本(producer&consumerapi)。
当我在vm客户机系统上运行kafka和zookeeper服务器时,我可以从vm(主机)外部连接,通过producer&consumerapi进行生产和消费。
当我在docker环境中运行kafka时,我可以从vm外部的主机系统进行连接,这意味着我可以查看所有主题,获取有关主题的信息,同时还可以在docker中看到kafka和zookeeper的一些调试输出。
不幸的是,不可能产生或使用任何来自主机系统与docker kafka之间的消息。我从producerapi得到一个“batch expired”异常,消费者返回一个“closedchannelexception”。
我在谷歌上做了很多搜索,找到了很多解决类似问题的方法。其中大多数引用kafka-server.properties中的advised.host.name参数,该参数可通过.yaml中的kafka\u advised\u host\u name访问。https://stackoverflow.com/a/35374057/3770602 e、 当上述两个错误都发生时,指的是该参数。不幸的是,没有一个场景同时具有docker和vm功能。
此外,尝试修改此参数完全没有影响。虽然我对docker和kafka不是很熟悉,但我在这里看到了一个问题,因为kafka的消费者和生产者将获得docker环境的本地ip,在nat的情况下是10.0.2.15,用作代理。但不幸的是,这个ip在vm之外是不可见的。因此,解决方案可能是改变设置,在virtualbox网络中使用桥接模式。奇怪的是,桥接连接(当然)通过dhcp连接到vm的一个自己的ip,然后从vm和主机系统连接到一个不可访问的docker kafka。这最后的行为对我来说似乎很尴尬。
最后我的问题是,如果有人对这个或类似的场景有一些经验,可以告诉我,如何配置docker kafka、virtualbox vm和主机系统。我真的尝试了很多不同的设置为消费者和生产者的呼吁没有成功。当然也欢迎一些docker、kafka或docker和kafka的Maven来回答。
如果您需要更多的信息或您可以提供一些提示,请让我知道。
提前谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题