Windows 上连接虚拟机上docker的kafka报错unknown host

Kafka Listeners - Explained

https://rmoff.net/2018/08/02/kafka-listeners-explained/

 The key thing is that when you run a client, the broker you pass to it is just where it’s going to go and get the metadata about brokers in the cluster from. The actual host & IP that it will connect to for reading/writing data is based on the data that the broker passes back in that initial connection—even if it’s just a single node and the broker returned is the same as the one connected to.

You need to set advertised.listeners (or KAFKA_ADVERTISED_LISTENERS if you’re using Docker images) to the external address (host/IP) so that clients can correctly connect to it. Otherwise they’ll try to connect to the internal host address–and if that’s not reachable then problems ensue.

Put another way, courtesy of Spencer Ruport:

LISTENERS are what interfaces Kafka binds to. ADVERTISED_LISTENERS are how clients can connect.

HOWTO: Connecting to Kafka on Docker

 

 

Here’s an example configuration:
1
2
3
4
listeners=INTERNAL://0.0.0.0:19092,EXTERNAL://0.0.0.0:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=INTERNAL://ip-172-31-18-160.us-west-2.compute.internal:19092,EXTERNAL://ec2-54-191-84-122.us-west-2.compute.amazonaws.com:9092
inter.broker.listener.name=INTERNAL

  

错误

[thrd:kafka1:9092/1002]: kafka1:9092/1002: Failed to resolve 'kafka1:9092': 不知道这样的主机。 (after 2253ms in state CONNECT, 1 identical error(s) suppressed)
 
The brokers will advertise themselve using advertised.listeners (which seems to be abstracted with KAFKA_ADVERTISED_HOST_NAME in that docker image) and the clients will consequently try to connect to these advertised hosts and ports.
You will thus need to make sure the client can resolve and reach this advertised hostnames, e.g. by adding "kafka" to /etc/hosts on the client host.

192.168.0.11 是虚拟机上的IP,Windows Client 机上连不上虚拟机里面的docker网络172.20.0.14~16,而连接里必须跟KAFKA_ADVERTISED_LISTENERS的设置地址一样,在window上hosts文件设置
192.168.0.11 kafka1
192.168.0.11 kafka2
192.168.0.11 kafka3
 
1
2
3
4
5
6
7
8
9
10
11
12
public override void ConfigureServices(ServiceConfigurationContext context)
        {
            Configure<AbpKafkaOptions>(options =>
            {
                //options.Connections.Default.BootstrapServers = "127.0.0.1:9092";
                options.Connections.Default.BootstrapServers = "kafka1:9092,kafka2:9093,kafka3:9094";
            });
 
            Configure<AbpKafkaEventBusOptions>(options =>
            {
                options.GroupId = "MyGroupId2";
                options.TopicName = "MyTopicName"; 

 
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
version: '3.7'
 
networks:
  br17219:
    external:
      name: br17219
 
services:
  zk1:
    image: zookeeper
    hostname: zk1
    container_name: zk1
    ports:
      - 2181:2181
      - 8181:8080
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - /usr/local/zookeeper/zk1/data:/data
      - /usr/local/zookeeper/zk1/datalog:/datalog
    networks:
      br17219:
        ipv4_address: 172.20.0.11
 
  zk2:
    image: zookeeper
    hostname: zk2
    container_name: zk2
    ports:
      - 2182:2181
      - 8182:8080
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - /usr/local/zookeeper/zk2/data:/data
      - /usr/local/zookeeper/zk2/datalog:/datalog
    networks:
      br17219:
        ipv4_address: 172.20.0.12
 
  zk3:
    image: zookeeper
    hostname: zk3
    container_name: zk3
    ports:
      - 2183:2181
      - 8183:8080
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
    volumes:
      - /usr/local/zookeeper/zk3/data:/data
      - /usr/local/zookeeper/zk3/datalog:/datalog
    networks:
      br17219:
        ipv4_address: 172.20.0.13
       
  kafka1:
    image: wurstmeister/kafka
    depends_on:
      - zk1
      - zk2
      - zk3
    restart: always
    hostname: kafka1
    container_name: kafka1
    ports:
      - 9092:9092
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka1
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zk1:2181,zk2:2181,zk3:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
      KAFKA_LISTENERS: PLAINTEXT://kafka1:9092
    volumes:
      - /usr/local/kafka/kafka1/logs:/kafka
    external_links:  
      - zk1
      - zk2
      - zk3
    networks:
      br17219:
        ipv4_address: 172.20.0.14
    extra_hosts:
      - kafka1:172.20.0.14
 
  kafka2:
    image: wurstmeister/kafka
    depends_on:
      - zk1
      - zk2
      - zk3
    restart: always
    hostname: kafka2
    container_name: kafka2
    ports:
      - 9093:9093
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka2
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_ZOOKEEPER_CONNECT: zk1:2181,zk2:2181,zk3:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9093
      KAFKA_LISTENERS: PLAINTEXT://kafka2:9093
    volumes:
      - /usr/local/kafka/kafka2/logs:/kafka
    external_links:  
      - zk1
      - zk2
      - zk3
    networks:
      br17219:
        ipv4_address: 172.20.0.15
    extra_hosts:
      - kafka2:172.20.0.15
 
  kafka3:
    image: wurstmeister/kafka
    depends_on:
      - zk1
      - zk2
      - zk3
    restart: always
    hostname: kafka3
    container_name: kafka3
    ports:
      - 9094:9094
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka3
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_ZOOKEEPER_CONNECT: zk1:2181,zk2:2181,zk3:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9094
      KAFKA_LISTENERS: PLAINTEXT://kafka3:9094
    volumes:
      - /usr/local/kafka/kafka3/logs:/kafka
    external_links:  
      - zk1
      - zk2
      - zk3
    networks:
      br17219:
        ipv4_address: 172.20.0.16
    extra_hosts:
      - kafka3:172.20.0.16
 
  kafka-manager:
    image: sheepkiller/kafka-manager:latest
    restart: always
    container_name: kafka-manager
    hostname: kafka-manager
    ports:
      - "9010:9000"
    links:           
      - kafka1
      - kafka2
      - kafka3
    external_links:  
      - zk1
      - zk2
      - zk3
    environment:
      ZK_HOSTS: zk1:2181,zk2:2181,zk3:2181                
      TZ: CST-8
    networks:
      br17219:
        ipv4_address: 172.20.0.20
         
  efak:
    image: ydockerp/efak:2.0.8
    restart: always
    container_name: efak-manager
    hostname: efak
    ports:
      - "8048:8048"
    depends_on:
      - kafka1
      - kafka2
      - kafka3
    environment:
      ZK_HOSTS: zk1:2181,zk2:2181,zk3:2181
    networks:
      br17219:
        ipv4_address: 172.20.0.21

  

结果

 

 

 

posted on   白马酒凉  阅读(999)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示