// 如果我说它不好,应该会有大佬走出来告诉我它应该怎么用,嗯!
我通过 docker 在本地部署 kafka,之后在容器内部用 console-producer 和 console-consumer 脚本试了一下,功能是正常的,但容器外使用 golang 程序( sarama )连接却无法成功
zookeeper 中的注册信息是这样的:
get /brokers/ids/1001
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://localhost:9092"],"jmx_port":-1,"host":"localhost","timestamp":"1585138788130","port":9092,"version":4}
docker 部署时使用的参数是:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_CREATE_TOPICS: "test:1:2"
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
kafka 版本 2.4.0, zookeeper 版本 3.4.13
sarama 反馈信息:“kafka: client has run out of available brokers to talk to (Is your cluster reachable?)”
sarama log:
[sarama] 2020/03/25 20:41:02 client/metadata fetching metadata for all topics from broker 127.0.0.1:9092
[sarama] 2020/03/25 20:41:02 Connected to broker at 127.0.0.1:9092 (unregistered)
[sarama] 2020/03/25 20:41:02 client/metadata got error from broker -1 while fetching metadata: read tcp 127.0.0.1:52260->127.0.0.1:9092: read: connection reset by peer
[sarama] 2020/03/25 20:41:02 Closed connection to broker 127.0.0.1:9092
[sarama] 2020/03/25 20:41:02 client/metadata no available broker to send metadata request to
[sarama] 2020/03/25 20:41:02 client/brokers resurrecting 1 dead seed brokers
[sarama] 2020/03/25 20:41:02 Closing Client
kafka: client has run out of available brokers to talk to (Is your cluster reachable?)
1
ysjiang4869 2020-03-26 00:09:06 +08:00 via Android 1
advwrtised host name,去查一下,仅仅因为配置不了解就说难用,也太张口就来了
|
2
nvkou 2020-03-26 01:14:21 +08:00 via Android
此 localhost 非彼 local host ?
|
3
ysmood 2020-03-26 01:46:47 +08:00
我觉是单纯只是设计上不友好,一般系统默认配置就能跑示例代码,而 kafka 非要设置额外的东西。而且在 docker 里还容易泄漏 pid 的 lock 文件。
所以我做了个 image 来处理这些琐碎的事,感兴趣可以试试 https://github.com/ysmood/kafka-image 这里注释了为什么我们要这样做 https://github.com/ysmood/kafka-image/blob/e58ee2c466890ba2d86d82a25def0d6828faa382/cmd/run/main.go#L24 |
4
vindurriel 2020-03-26 04:36:55 +08:00 via iPhone
这里介绍了一种方法 开两个 listeners 以及为什么要这样做 rmoff.net/2018/08/02/kafka-listeners-explained/
|
5
jiezhi 2020-03-26 07:20:43 +08:00 via iPhone 1
小伙子真会问问题,激发了程序员不服的心理,马上好多人过来教你。
|
7
ArtIsPatrick 2020-03-26 08:06:10 +08:00 via iPhone
有勇气,就算我觉得难用,我也不敢来发帖。。。
|
8
locoz 2020-03-26 08:21:12 +08:00 via Android
好好好,对对对。下一个。
|
9
huiyifyj 2020-03-26 08:49:47 +08:00 via Android
@ArtIsPatrick #7
+1 。是的呢,即使某些项目再难使用,文档再简陋,都不好意思发帖 bb,因为不清楚会引来多少程序员的不服和反驳😂。 PS: 个人觉得程序员最喜欢去反驳别人的观点,虽然我也是程序员 |
10
yianing 2020-03-26 11:12:29 +08:00 via Android
东西是好东西,难用也是真的😂
|
11
rrfeng 2020-03-26 11:32:22 +08:00
虽然楼主这个问题有点简单,但是 kafka 是真的难维护。
|
12
STRRL 2020-03-26 11:35:25 +08:00
你正好踩到了在 docker 里跑 kafka 的一个坑, 参考下这个吧
https://github.com/wurstmeister/kafka-docker/wiki/Connectivity 在用一个轮子之前请确保理解了这个轮子, 要不然很容易犯错的 |
13
Mrpasserby 2020-03-26 12:44:21 +08:00
+1,难用的一笔,完全是 Java 工程师岗位创造机器
|
14
whisky221 2020-03-26 12:52:48 +08:00
|
15
Vegetable 2020-03-26 12:56:32 +08:00
网上得到问题答案的最好办法不是虚心请教,而是发布一个错误的答案等大佬来反驳。
|
16
julyclyde 2020-03-26 17:59:29 +08:00
说白了这不都怪你用 docker 么
跟 kafka 有啥关系? |