Spring集成Kafka小記

POM引入spring-kafka

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>${spring-kafka.version}</version>
</dependency>

這個地方版本很重要。引入什麼版本的依賴需要看安裝的是什麼版本的Kafka。版本不對,可能跑不通。

1) kafka-clients 包版本與服務器端kafka-clients版本保持一致(查看服務器kafka版本方法 在kafka安裝目錄下libs 中查找kafka-clients開頭的jar文件)

2)引入的spring-kafka 版本在2.0或者2.X 時Spring版本在5.0才能支持

版本對應關係見http://spring.io/projects/spring-kafka

下面這句話重要,我的即是參考這句話配的<spring-kafka.version>1.3.5.RELEASE</spring-kafka.version>:

application-dev.yaml中,spring下配置:

kafka:
  #bootstrap-servers: nodex.abdt.com:9092,nodey.abdt.com:9092,nodez.abdt.com:9092
  bootstrap-servers: v-host:9092
  consumer:
    enable-auto-commit: true
    group-id: metaDataBloodLineageConsumer
    auto-offset-reset: latest
    keyDeserializer: org.apache.kafka.common.serialization.StringDeserializer
    valueDserializer: org.apache.kafka.common.serialization.StringDeserializer

nodex環境需keberos認證,大家開發環境統一存jaas.conf麻煩,所以改用無kb認證的v-host對付測試。

上述配置完成後,代碼:

@ApiOperation("監聽kafka topic 數據質量檢查結果。檢查結果msg爲ums格式。")
@KafkaListener(topics = {"dataChkResult"})
public int xxx(String dataChkResult) {
    yyy.zzz(dataChkResult);
    return 0;
}

能監聽到msg。

之前就通的。一個月以後再用的時候,有問題,xxx:9092 disconnected ……

或者雖然不報錯,但發消息監聽不到,沒動靜(可能是被測試環境消費了的原因?)。

折騰完,可以收到消息了。聊記。以備後續又出問題好迅速回血。

 

下面這個文章的介紹算較簡明且全面:

SpringBoot整合並簡單使用Kerberos認證的Kafka

https://blog.csdn.net/justry_deng/article/details/88387898

-----------------------------

keberos訪問

普通kafka訪問ok。但和kb認證的kafka結合,要怎樣做呢?

(1)到kafka所在機器下載 /etc/krb5.conf

(2)到kafka安裝目錄下載kafka_client_jaas.conf、kafka.service.keytab

(3)上面三個文件都放到D:\Codes下面

(4)修改kafka_client_jaas.conf,將其中kafka.service.keytab的path調整爲當前指定的位置,注意path用雙斜線。

(5)指定環境變量。

可以System.setProperties(att,val),也可以啓動參數裏配置。

考慮到開發環境和生產環境部署遍歷性,選擇後一種方式。

-Djava.security.auth.login.config=D://Codes//kafka_client_jaas.conf -Djava.security.krb5.conf=D://Codes//krb5.conf

其它kafka的配置按常規走即可。配置文件、zk、從配置中心獲取等。

 

內部參考文檔位置:D:\all_docs\dbus_docs\測試環境相關\連接kerberos認證的kafka集羣.docx

----------------------

需要連接kerberos認證的kafka。參考網上的配置,在yaml中爲consumer加入sasl sec配置,如下所示:

但是不work,持續報broker disconnected。

查看啓動日誌,發現yaml配置裏的group_id成功取到了,但security.protocol卻不是yaml裏配置的。

跟蹤org.springframework.boot.autoconfigure.kafka.KafkaProperties源碼,發現properties如下注釋:

研究了一下,覺得properties和consumer是平級的。

把properties及其下屬屬性往上提一級,並且指定mechanism爲GSSAPI,而非PLAIN,問題解決:

很奇怪往上的配置,基本沒見properties位置正確的。也許是舊版本的配法?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章