1.前言
系統環境:Spring+SpringMVC+Mybatis+Maven
這裏系統環境不一定要跟我一樣,但是建議使用maven,方便管理jar包。
現階段只是實現了簡單的java對接kafka,所以會比較簡單,要是有大神路過請指正,或者給些更深入的指導。
2.簡單的實現java對接kafka
2.1.Kafka學習網站
- Kafka的安裝和深入學習:
http://orchome.com/kafka/index
這個鏈接基本是翻譯kafka的官網,對於英語不好的同學還是很有幫助的。而且這個網站還有ngnix的學習參考。
- Kafka與Spring集成: 感謝這個博文的作者:名字可以起這麼長,我基本是參考了他的文檔和代碼。但是不得不說還是踩了很多坑,這也是我寫這個博文的原因,避免後來人走彎路。他的博文裏面有個jar包引用應該是有問題的:spring-kafka的vision我用的是1.2.0.RELEASE。
2.2.對接過程中的注意點
2.2.1.我的代碼
Git:https://gitee.com/Coline/ssm.git
這個代碼主要是我用於學習新知識用的,大多是技術的堆砌,歡迎大家拍磚。Kafka相關的代碼在ssm-kafka中,配置文件在ssm-all的resources/conf/kafka中。
2.2.2.開始排雷
- Kafka配置文件:server.properties
路徑:kafka安裝目錄/config/server.properties
配置項:advertised.listeners=PLAINTEXT://【kafka服務器ip】:【kafka服務端口】
這裏默認是沒有配置的,所以需要大家手動加。
解釋:"PLAINTEXT"表示協議,可選的值有PLAINTEXT和SSL,hostname可以指定IP地址,也可以用"0.0.0.0"表示對所有的網絡接口有效,如果hostname爲空表示只對默認的網絡接口有效,也就是說如果你沒有配置advertised.listeners,就使用listeners的配置通告給消息的生產者和消費者,這個過程是在生產者和消費者獲取源數據(metadata)。如果都沒配置,那麼就使用java.net.InetAddress.getCanonicalHostName()返回的值,對於ipv4,基本就是localhost了。然後生產者就會一直卡死,沒有反應,原因是你的客戶端連接的是127.0.0.1:9092,而不是你期望的服務器的地址。因此只需要把listeners的地址修改成你的服務器地址即可。 --該解釋轉自:https://www.jianshu.com/p/71b295e1df4f
這裏踩了很久的坑,就是本機能生產消費,java代碼不行,一直以爲是代碼問題,結果是配置問題。
- Kafka配置文件:server.properties
路徑:kafka安裝目錄/config/ consumer.properties
配置項:group.id
這個配置項要與java的生產者和消費者配置項相對應。
- java配置文件
我是參照別人的代碼使用KafkaMessageListenerContainer作爲kafka消費者監聽。
配置文件在我的代碼: ssm-all/resource/conf/kafka/kafkaContext-kafkaConsumer.xml
<constructor-arg name="topics"value="ssm_java"/>
注意這個配置項是topic,之前參照別人的代碼並沒有這個name,導致弄了好久,一直沒注意這個配置,其實當時自己心裏也覺得怪怪的,消費不配置topic他怎麼知道消費誰,後來偶然間發現的,當時好開心。
- Java配置文件
ssm-all/resource/conf/kafka/kafkaContext-kafkaConsumer.xml和ssm-all/resource/conf/kafka/kafkaContext-kafkaProducer.xml
這兩個要和監聽實現類對應
3.後記
kafka的spring對接我只講這些,因爲大部分是參照別人的,也沒有太多自己的創造,這裏只說一些踩過的坑,後面會繼續學習。