无法连接到网络外部的kafka

u91tlkcl  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(365)

我正在尝试将我的作业连接到一个容器中,该容器将事件发送到另一个容器中的kafka集群。无论我尝试了什么,我都无法将事件发送到kafka主题我尝试了telnet和kafkacat到我的kafka的地址侦听器端口,一切正常:
telnet输出
Kafka卡特输出
这是我的作业文件,“172.16.33.91”是我的本地ip地址:

version: '3'
services:
    events-processor:
        build:
            context: ./events-processor
        extra_hosts:
            - "host:172.16.33.91"
        restart: unless-stopped

这是我的作业代码,它将数据从1->1000发送到现有的topic num测试:

from time import sleep
from json import dumps
from kafka import KafkaProducer

if __name__=="__main__":
    producer = KafkaProducer(bootstrap_servers=['host:9093'],
                             value_serializer=lambda x: dumps(x).encode('utf-8'))
    for e in range(1000):
        data = {'number' : e}
        producer.send('numtest', value=data)
        print(data)
        sleep(5)

这是我的kafka zookeeper文件:

version: '3'

services: 
    zookeeper:
        image: confluentinc/cp-zookeeper
        environment:
            ZOOKEEPER_CLIENT_PORT: 2181
            ZOOKEEPER_TICK_TIME: 2000
        volumes:
            - zk-data:/var/lib/zookeeper/data
            - zk-logs:/var/lib/zookeeper/log
            - secrets:/etc/zookeeper/secrets
        restart: unless-stopped

    kafka:
        image: confluentinc/cp-kafka
        depends_on:
            - zookeeper
        ports: 
            - "9093:9093"
        environment:
            KAFKA_BROKER_ID: 1
            KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
            KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://:9093
            KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT      
            KAFKA_LISTENERS: INTERNAL://:9092,EXTERNAL://:9093
            KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
            KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
        volumes:
            - kafka-data:/var/lib/kafka/data
            - secrets:/etc/kafka/secrets
        restart: unless-stopped

volumes:
    zk-logs: {}
    zk-data: {}
    kafka-data: {}
    secrets: {}

有人知道我做错了什么吗?感谢您的帮助!!!

o75abkj4

o75abkj41#

如果有一个更好的地方应该把这些信息,或关键字你错过了找到解决办法,让社区知道
已经有多个博客写过了

KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,HOST://localhost:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,HOST:PLAINTEXT      
KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092,HOST://0.0.0.0:9093

使用 ://:port 地址将只侦听本地主机名,容器与否
必须通过绑定到所有接口0.0.0.0来侦听外部连接
必须在内部和/或任何外部主机名上播发

l7mqbcuq

l7mqbcuq2#

我记得在连接方面遇到过类似的问题。事实证明,为了使容器能够访问主机上的端口,您可能需要向防火墙添加其他规则来打开它。
例如,对于iptables,您可以添加如下规则,以允许您的主机接受来自docker容器的请求。

-A INPUT -i docker0 -j ACCEPT

或者,您可以将作业容器放在与kafka/zookeeper相同的docker网络上。可以将应用程序放在同一个docker compose文件中,也可以使用公共的外部docker网络。

相关问题