場景說明
今天接到的一個(gè)任務(wù)是做公網(wǎng)接入阿里云的kafka沙廉。不推薦通過公網(wǎng)訪問扶叉。
由于通過公網(wǎng)問嗓节,需要配置為客戶端接入配置SASL_SSL的鑒權(quán)荧缘,設(shè)置證書,協(xié)議拦宣,訪問模式的賬號密碼等參數(shù)截粗。
自己的應(yīng)用采用的是spring boot + spring kafka來接入kafka信姓。
因此,在配置上需要做一些適配和調(diào)整绸罗。
官方文檔
https://help.aliyun.com/knowledge_detail/99958.html
原生的配置意推,主要有幾個(gè)點(diǎn):
在控制臺下載ssl證書 ---- kafka.client.truststore.jks,放在機(jī)器的某個(gè)路徑上珊蟀,不要跟著應(yīng)用打包
-
構(gòu)建 kafka_client_jaas.conf菊值,它包含著登錄模式,登錄用賬號密碼等的信息育灸,賬號密碼信息在控制臺上能找到腻窒。將應(yīng)用啟動參數(shù)java.security.auth.login.config設(shè)置為kafka_client_jaas.conf的絕對路徑,可以通過代碼或者啟動參數(shù)設(shè)置磅崭。
注意 : spring boot配置中可以不需要的這個(gè)kafka_client_jaas.conf儿子,它通過讀取application.yaml中的配置生成了一個(gè),設(shè)置到應(yīng)用中绽诚,具體見下典徊。
根證書是有密碼,阿里云kafka證書統(tǒng)一的解析密碼為KafkaOnsClient恩够。
接入?yún)f(xié)議為SASL_SSL, 鑒權(quán)方式為PLAIN卒落。
配置適配
由于采用spring boot + spring kafka來接入kafka,配置的時(shí)候需要做一下適配調(diào)整蜂桶。
spring boot讀取kafka屬性的類為org.springframework.boot.autoconfigure.kafka.KafkaProperties儡毕,其中也包含有SSL, JAAS的配置項(xiàng),這些是我們需要配置的扑媚。
當(dāng)然也有一些額外的配置腰湾,需要通過通用的properties給設(shè)置進(jìn)去,讓spring讀取到疆股,轉(zhuǎn)換成kafka-client的配置费坊。
SSL
主要是設(shè)置證書文件的絕對路徑和證書解密密碼。
這里是分別都為producer, consumer設(shè)置ssl的參數(shù)
JAAS
主要是配置屬性旬痹,然后構(gòu)建一個(gè)類似kafka_client_jaas.conf的文件附井,設(shè)置到應(yīng)用中,最終的實(shí)質(zhì)也仍然是將生成的文件路徑設(shè)置給java.security.auth.login.config這個(gè)應(yīng)用變量两残。
spring:
kafka:
jaas:
enabled: true
loginModule: org.apache.kafka.common.security.plain.PlainLoginModule
controlFlag: REQUIRED
options:
username: aliyun-kafka-username
password: aliyun-kafka-password
...
其中各個(gè)屬性的值可以對照阿里云官方接入文檔中kafka_client_jaas.conf文件內(nèi)容進(jìn)行配置
額外參數(shù)
通過producer, consumer的properties屬性可以添加額外自定義的屬性永毅,這里主要設(shè)置了
- sasl.mechanism: PLAIN
- security.protocol: SASL_SSL
配置例子
spring:
kafka:
bootstrap-servers: kafka-server1, kafka-server2, kafka-server3
jaas:
enabled: true
loginModule: org.apache.kafka.common.security.plain.PlainLoginModule
options:
username: aliyun-kafka-username
password: aliyun-kafka-password
consumer:
ssl:
truststorePassword: KafkaOnsClient
truststoreLocation: file:/etc/kafka/kafka.client.truststore.jks
properties:
sasl.mechanism: PLAIN
security.protocol: SASL_SSL
group-id: consumer-group
max-poll-records: 2
producer:
ssl:
truststorePassword: KafkaOnsClient
truststoreLocation: file:/etc/kafka/kafka.client.truststore.jks
retries: 3
acks: 1
compression-type: lz4
buffer-memory: 33554432
batch-size: 51200
properties:
send.buffer.bytes: 262144
sasl.mechanism: PLAIN
security.protocol: SASL_SSL