Golang Go语言通过 sarama 连接到 kafka 的疑惑
Golang Go语言通过 sarama 连接到 kafka 的疑惑
// 问题:
Golang 通过 sarama 连接到 kafka,没有指定 group,连接的 topic 只有一个 partition,通过 2 台机器上一样的程序连上 kafka 上, 这 2 个程序都能消费这一个 partition 的数据.
那么这个 2 台机器上的应用程序是属于同一个 group 的,而且是同一个 consumer? 要知道一个 partition 只能被每个 group 的一个 consumer 消费的!!!
// kafka 版本:
root@ubuntu18:/usr/local/kafka_2.11-2.0.0/bin# ./kafka-topics.sh --version 2.0.0 (Commit:3402a8361b734732)
// topic 只有一个 partition
root@ubuntu18:/usr/local/kafka_2.11-2.0.0/bin# kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic topic.XXX Topic:topic.skygram PartitionCount:1 ReplicationFactor:1 Configs: Topic: topic.XXX Partition: 0 Leader: 0 Replicas: 0 Isr: 0
// 只有一个 group,看不到其他的 group 和 consumer 的消息
root@ubuntu18:/usr/local/kafka_2.11-2.0.0/bin# ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
KMOffsetCache-ubuntu18
// 确实是两台机器连上的
root@ubuntu18:/usr/local/kafka_2.11-2.0.0/bin# netstat -antop|grep 9092|grep ESTABLISHED tcp 0 0 192.168.198.145:50396 192.168.198.145:9092 ESTABLISHED 18330/./main_linux keepalive (1.00/0/0) tcp 0 0 192.168.198.145:50394 192.168.198.145:9092 ESTABLISHED 18330/./main_linux keepalive (4.07/0/0) tcp 0 0 192.168.198.145:50392 192.168.198.145:9092 ESTABLISHED 18330/./main_linux keepalive (4.07/0/0) tcp6 0 0 192.168.198.145:9092 192.168.198.145:50394 ESTABLISHED 4367/java keepalive (3630.28/0/0) tcp6 0 0 192.168.198.145:9092 192.168.198.1:54181 ESTABLISHED 4367/java keepalive (1688.40/0/0) tcp6 0 0 192.168.198.145:9092 192.168.198.145:43006 ESTABLISHED 4367/java keepalive (4265.90/0/0) tcp6 0 0 192.168.198.145:9092 192.168.198.1:54183 ESTABLISHED 4367/java keepalive (1688.40/0/0) tcp6 0 0 192.168.198.145:43012 192.168.198.145:9092 ESTABLISHED 4699/java keepalive (4266.62/0/0) tcp6 0 0 192.168.198.145:9092 192.168.198.1:54182 ESTABLISHED 4367/java keepalive (1688.40/0/0) tcp6 0 0 192.168.198.145:9092 192.168.198.145:50396 ESTABLISHED 4367/java keepalive (3742.75/0/0) tcp6 0 0 192.168.198.145:43006 192.168.198.145:9092 ESTABLISHED 4699/java keepalive (4265.90/0/0) tcp6 0 0 192.168.198.145:9092 192.168.198.145:50392 ESTABLISHED 4367/java keepalive (3630.28/0/0) tcp6 0 0 192.168.198.145:9092 192.168.198.145:43012 ESTABLISHED 4367/java keepalive (4266.62/0/0
更多关于Golang Go语言通过 sarama 连接到 kafka 的疑惑的实战教程也可以访问 https://www.itying.com/category-94-b0.html
没有指定 group,那 group 可能是随机的,去 zookeeper 里可以看到有哪些 comsumer group
更多关于Golang Go语言通过 sarama 连接到 kafka 的疑惑的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
zk 里面是空的,很是令我困惑
[zk: localhost:2181(CONNECTED) 2] ls /
[cluster, controller_epoch, controller, brokers, zookeeper, kafka-manager, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]
[zk: localhost:2181(CONNECTED) 3] ls /consumers
[]
我也偏向认为这是 2 个 group,但是怎么从 kafka 的后台来证明这是 2 个 group 呢
还有,好像新版本的 kafka 的 consumer 的信息已经不在 zk 里了
是用这个命令来看
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
那 group 有可能是空的,KMOffsetCache-ubuntu18 可能是命令行测试生成的
https://www.google.com/search?biw=1920&bih=937&sxsrf=ACYBGNRoNLV3NleeP-K5T0mwRDkF8D-A6g%3A1579151812697&ei=xPEfXvyKKreu0PEPsda2wAQ&q=KMOffsetCache&oq=KMOffsetCache&gs_l=psy-ab.12…35i39i19j35i39l2j0i10.4516664.4516664…4517922…3.0…2.1015.3690.4-1j1j2j1…0…2j1…gws-wiz…33i160.1BsHGQK4MGc&ved=0ahUKEwj8_N32rofnAhU3FzQIHTGrDUgQ4dUDCAs
不是命令行,这是由于这种消费者的信息是存放在 __consumer_offsets 中
不管 KMOffsetCache-ubuntu18 怎么来的,我的意思是你的两个程序可能都使用的空 groupID,我搜了下,groupID 只是一个 label 标识,默认为空,也就是可以为空
Consumers label themselves with a consumer group name, and each record published to a topic is delivered to one consumer instance within each subscribing consumer group. Consumer instances can be in separate processes or on separate machines.
https://stackoverflow.com/questions/43118671/kafka-consumer-default-group-id
https://cwiki.apache.org/confluence/display/KAFKA/KIP-289%3A+Improve+the+default+group+id+behavior+in+KafkaConsumer
关于使用 Golang 和 Sarama 库连接到 Kafka 的疑惑,这里有几个关键点可以帮助你理解和解决问题:
-
依赖管理: 确保你的项目中已经正确引入了 Sarama 库。你可以通过
go get github.com/Shopify/sarama
命令来安装 Sarama,并在你的 Go 文件中通过import
语句来引用它。 -
连接配置: 在创建 Kafka 客户端时,你需要提供 Kafka broker 的地址和端口,以及其他可能的配置选项(如客户端 ID、超时时间等)。确保这些配置与你的 Kafka 集群设置相匹配。
-
生产者和消费者: 使用 Sarama,你可以方便地创建生产者和消费者。生产者用于向 Kafka 发送消息,而消费者则用于从 Kafka 接收消息。确保你正确设置了主题(Topic)、分区(Partition)和偏移量(Offset)等参数。
-
错误处理: 在连接 Kafka 和进行消息发送/接收时,可能会遇到各种错误。务必进行充分的错误处理,以便在出现问题时能够及时发现并解决。
-
文档和示例: 查阅 Sarama 的官方文档和示例代码,这可以帮助你更好地理解如何使用这个库。文档中通常包含了详细的参数说明和用法示例。
-
社区支持: 如果你遇到了无法解决的问题,可以考虑在 Stack Overflow、GitHub Issues 或其他 Go 社区中寻求帮助。
希望这些信息能够解答你的疑惑,并帮助你顺利地使用 Golang 和 Sarama 连接到 Kafka。