首页 > 编程问答 >使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft

使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft

时间:2024-08-01 15:41:01浏览次数:11  
标签:python docker kubernetes apache-kafka

我正在尝试从 kubernetes 集群外部连接到 kubernetes minikube kafka pod。 服务器启动没有任何问题,但我无法设法将本地 kafka 生产者/消费者连接到外部 kafka pod。

在集群内的 kafka 服务器映像上,我将 bootstrap-server 设置为:

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic "test"

服务kafka 服务器 pod 设置为:

apiVersion: v1
kind: Service
metadata:
  name: {{ .Chart.Name }}-service
spec:
  type: NodePort
  ports:
    - name: {{ .Chart.Name }}
      port: 9092
      nodePort: 30092
  selector:
    app: {{ .Chart.Name }}

我在部署中为侦听器设置的唯一 kafka 配置如下。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Chart.Name }}-deployment
  labels:
    app: {{ .Chart.Name }}
spec:
  {{- if not .Values.autoscaling.enabled }}
  replicas: {{ .Values.deployment.replicaCount }}
  {{- end }}
  selector:
    matchLabels:
      app: {{ .Chart.Name }}
  template:
    metadata:
      labels:
        app: {{ .Chart.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.deployment.image }}"
          imagePullPolicy: {{ .Values.deployment.pullPolicy }}
          command: {{ .Values.deployment.initCommand | toYaml | nindent 12 }}
          ports:
              - containerPort: 9092
                name: internal
              - containerPort: 9093
                name: controller
              - containerPort: 30092
                name: nodeport
          env:
            - name: KRAFT_TOPIC_ML
              value: {{ .Values.deployment.topic.nameML }}
            - name: KRAFT_TOPIC_ML_REPLICATION_FACTOR
              value: "{{ .Values.deployment.topic.replicationFactorML }}"
            - name: KRAFT_TOPIC_ML_PARTITIONS
              value: "{{ .Values.deployment.topic.partitionsML }}"
            - name: KRAFT_TOPIC_MILP
              value: {{ .Values.deployment.topic.nameMILP }}
            - name: KRAFT_TOPIC_MILP_REPLICATION_FACTOR
              value: "{{ .Values.deployment.topic.replicationFactorMILP }}"
            - name: KRAFT_TOPIC_MILP_PARTITIONS
              value: "{{ .Values.deployment.topic.partitionsMILP }}"

            - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
              value: "INTERNAL:PLAINTEXT,NODEPORT:PLAINTEXT,CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL"
            - name: KAFKA_LISTENERS
              value: "INTERNAL://0.0.0.0:9092,NODEPORT://0.0.0.0:30092,CONTROLLER://0.0.0.0:9093"
            - name: KAFKA_ADVERTISED_LISTENERS
              value: "INTERNAL://localhost:9092,NODEPORT://localhost:30092"
            - name: KAFKA_INTER_BROKER_LISTENER_NAME
              value: "INTERNAL"
            - name: KAFKA_CONTROLLER_LISTENER
              value: "CONTROLLER"

当尝试使用本地 IP 和端口作为 30092 在我的计算机上本地连接到 kafka 服务器时可以找到代理并连接,但在生成消息时,它不会显示在相同 IP 和端口的消费者 python 端。

我尝试更改 kafka 侦听器配置,但没有成功。


你遇到的问题在于,尽管你将 KAFKA_ADVERTISED_LISTENERS 设置为使用 localhost ,但这个地址只能从集群内部访问。外部客户端(例如你的本地 Python 生产者和消费者)无法解析这个地址。

为了解决这个问题,你需要在 KAFKA_ADVERTISED_LISTENERS 中使用 Minikube 虚拟机的 IP 地址或外部可访问的域名。下面是如何操作的步骤:

1. 获取 Minikube IP 地址:

在你的终端中运行以下命令:

bash minikube ip

这将返回 Minikube 虚拟机的 IP 地址(例如,192.168.99.100)。

2. 更新 Kafka 配置:

KAFKA_ADVERTISED_LISTENERS 的值更新为使用 Minikube IP 地址:

yaml KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-service:9092,NODEPORT://<MINIKUBE_IP>:30092

<MINIKUBE_IP> 替换为你在步骤 1 中获取的 IP 地址。

注意:

  • 我们将内部侦听器配置为使用服务名称 kafka-service 进行 pod 间通信。
  • 确保 NODEPORT 侦听器使用 Minikube IP 和正确的 NodePort(在本例中为 30092)。

3. 应用更改:

将更新后的部署配置应用于你的 Kubernetes 集群:

bash kubectl apply -f <your-deployment-file.yaml>

4. 使用 Minikube IP 连接:

现在,在你的 Python 生产者和消费者代码中,使用 Minikube IP 地址和 NodePort 连接到 Kafka:

python bootstrap_servers=['<MINIKUBE_IP>:30092']

完成这些更改后,你的本地 Python 生产者和消费者应该能够连接到在 Minikube 上运行的 Kafka 集群并与之交互。

标签:python,docker,kubernetes,apache-kafka
From: 78819639

相关文章

  • wsl ubuntu20.4 安装docker
    docker网站被禁处理办法sudocurl-fsSLhttps://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg-o/etc/apt/keyrings/docker.ascsudochmoda+r/etc/apt/keyrings/docker.ascecho\"deb[arch=$(dpkg--print-architecture)signed-by=/etc/apt/keyrings/docker.......
  • python llama_index.indices.list.retrievers 导入错误
    fromllama_indeximportGPTListIndexfromllama_index.indices.list.retrieversimportListIndexLLMRetrieverdocuments=SimpleDirectoryReader('./data').load_data()index=GPTListIndex.from_documents(documents,service_context=service_context)r......
  • 如何使用 python 和 bs4 修复抓取 web 表输出 csv
    请帮帮我,,我想在“td”、“Barcode”和“namaproduk”中获取2个数据,但我得到的数据非常糟糕。我应该修复什么?importcsvimportrequestsfrombs4importBeautifulSoupoutfile=open("dataaa.csv","w",newline='')writer=csv.writer(outfile)page=0whilepag......
  • 基于Django的超市小程序+47822(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小
    基于django超市小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市小程序被用户普遍使用,为方便用户能够可以随时进行超市小程序的数据信息管理,特开发了基于djan......
  • 【优秀python django系统案例】基于python的医院挂号管理系统,角色包括医生、患者、管
    随着信息技术的迅猛发展,传统的医院挂号管理方式面临着效率低下、排队时间长、信息不对称等诸多问题。这些问题不仅影响患者的就医体验,也加重了医院工作人员的负担。在此背景下,基于Python的医院挂号管理系统应运而生。该系统旨在通过信息化手段优化挂号流程,提高管理效率,提升医疗......
  • Python-PLAXIS自动化建模技术与典型岩土工程
    原文链接:Python-PLAXIS自动化建模技术与典型岩土工程https://blog.csdn.net/2301_78164062/article/details/140607885?spm=1001.2014.3001.5501一:Plaxis软件及PlaxisPythonAPI环境搭建1、Plaxis2D\Plaxis3D软件2、面向对象编程语言Python及其开发环境Spyder3、Plaxis输......
  • 在Conda环境中安装python内核
    我刚刚开始使用jupyter笔记本进行我的开发过程。我首先创建一个新的python环境:$condacreate-ntestenv然后激活它:$sourceactivatetestenv并安装python内核模块:$pipinstallipykernel现在,模糊性开始了。我只想专门为我的活动环境创建一个新内核。......
  • C++11 中的 python 海象运算符 (:=) 等效吗?
    最近我在Python中经常使用:=运算符,这样:ifmy_object:=SomeClass.function_that_returns_object():#dosomethingwiththisobjectifitexistsprint(my_object.some_attribute)问题有没有办法在c++11中做到这一点而不使用stdlib?例如......
  • Python 自动创建阿里云 OSS 桶并配置静态网站托管
    在本文中,我们将介绍如何使用Python和阿里云OSSSDK自动创建OSS桶(如果不存在),并为新创建的桶配置静态网站托管。这对于自动化部署和管理静态网站非常有用。前提条件安装阿里云OSSSDK:pipinstalloss2准备好阿里云OSS的访问密钥(AccessKeyID和AccessKeySecret......
  • visual studio 2019下Python的开发环境搭建
    Python的开发环境有各种各样的,在Windows下可以通过各种IDE(IIntegratedDevelopmentEnvironment)来进行开发,比如Pycharm,Spyder,Thonny,Eclipse+PyDev等等一些琳琅满目的编辑器,当然还有我的选择VisualStudio。之所以会选择VS,是因为VS本身就是一个功能非常强大的集成开发环境,其优......