簡體   English   中英

在所有 kafka-pod 升級后,java 中的 kafka 消費者客戶端無法重新連接到 kubernetes kafka 代理

[英]kafka consumer client in java can't reconnect to kubernetes kafka brokers after all of kafka-pods are upgraded

我使用 spring-kafka(2.2.4.RELEASE) 來消費來自 kafka-server 的消息。 kafka 客戶端和服務器都部署在 k8s 集群中。 通常,在 kafka broker 上生成和消費消息是可以的。 但是 kafka-brokers 升級后,kafka 客戶端無法重新連接到 broker。

據我所知,當bootstrap-servers是虛擬 ip 時,kafka 客戶端重新連接有一個錯誤(詳細信息在這里)。 我的問題類似於 vip 錯誤。

在我的情況下, bootstrap-servers地址是k8s kafka service name :port,當kafka-brokers升級后, kafka servcie name對應的真實ip會發生變化。 所以 kafka 客戶端永遠不會成功重新連接。 我怎樣才能解決這個問題?

環境

  • kubectl 版本
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.10", GitCommit:"098570796b32895c38a9a1c9286425fb1ececa18", GitTreeState:"clean", BuildDate:"2018-08-02T17:19:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.10", GitCommit:"098570796b32895c38a9a1c9286425fb1ececa18", GitTreeState:"clean", BuildDate:"2018-08-02T17:11:51Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
  • 卡夫卡版本:卡夫卡_2.12-2.3.1
  • 卡夫卡部署信息:
> kubectl get svc -o wide -nbingotestdev|grep kafkadev
kafkadev                ClusterIP   None            <none>        9091/TCP                          1y        app=kafkadev
kafkadev-out            NodePort    10.68.206.93    <none>        9091:37142/TCP                    257d      app=kafkadev

> kubectl get pod -o wide -nbingotestdev|grep kafkadev
kafkadev-0                               1/1       Running             0          15h       172.20.10.59    10.171.113.45
kafkadev-1                               1/1       Running             0          15h       172.20.13.95    10.171.113.33
kafkadev-2                               1/1       Running             0          15h       172.20.2.173    10.171.113.62

  • kafka客戶端配置:
    • 版本 1: bootstrap-servers = kafkadev:9091
    • 版本 2: bootstrap-servers = 10.68.206.93:9091
    • 當 kafka 服務器正常時,兩者都可以成功工作,並且在 kafka 服務器 pod 升級后重新連接失敗。

您必須確保始終擁有一個靜態分配的 IP 集,當消費者獲取引導服務器時,該 IP 集作為廣告偵聽器返回,無論是通過外部 DNS 服務還是直接使用 k8s api 客戶端來檢查正在運行的 Kafka 服務,然后獲取所有地址以構建您的引導服務器字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM