Spring Boot + Spring Kafka配置公網接入阿里雲Kafka

場景說明

今天接到的一個任務是做公網接入阿里雲的kafka。不推薦通過公網訪問

由於通過公網問,需要配置爲客戶端接入配置SASL_SSL的鑑權,設置證書,協議,訪問模式的賬號密碼等參數。

自己的應用採用的是spring boot + spring kafka來接入kafka。

因此,在配置上需要做一些適配和調整。

官方文檔

https://help.aliyun.com/knowledge_detail/99958.html

原生的配置,主要有幾個點:

  • 在控制檯下載ssl證書 ---- kafka.client.truststore.jks,放在機器的某個路徑上,不要跟着應用打包
  • 構建 kafka_client_jaas.conf,它包含着登錄模式,登錄用賬號密碼等的信息,賬號密碼信息在控制檯上能找到。將應用啓動參數java.security.auth.login.config設置爲kafka_client_jaas.conf的絕對路徑,可以通過代碼或者啓動參數設置。

注意 : spring boot配置中可以不需要的這個kafka_client_jaas.conf,它通過讀取application.yaml中的配置生成了一個,設置到應用中,具體見下。

  • 根證書是有密碼,阿里雲kafka證書統一的解析密碼爲KafkaOnsClient
  • 接入協議爲SASL_SSL, 鑑權方式爲PLAIN

配置適配

由於採用spring boot + spring kafka來接入kafka,配置的時候需要做一下適配調整。

spring boot讀取kafka屬性的類爲org.springframework.boot.autoconfigure.kafka.KafkaProperties,其中也包含有SSL, JAAS的配置項,這些是我們需要配置的。

當然也有一些額外的配置,需要通過通用的properties給設置進去,讓spring讀取到,轉換成kafka-client的配置。

SSL

主要是設置證書文件的絕對路徑和證書解密密碼。

這裏是分別都爲producer, consumer設置ssl的參數

JAAS

主要是配置屬性,然後構建一個類似kafka_client_jaas.conf的文件,設置到應用中,最終的實質也仍然是將生成的文件路徑設置給java.security.auth.login.config這個應用變量。

spring:
  kafka:
    jaas:
      enabled: true
      loginModule: org.apache.kafka.common.security.plain.PlainLoginModule
      controlFlag: REQUIRED
      options:
        username: aliyun-kafka-username
        password: aliyun-kafka-password
      ...

其中各個屬性的值可以對照阿里雲官方接入文檔中kafka_client_jaas.conf文件內容進行配置

額外參數

通過producer, consumer的properties屬性可以添加額外自定義的屬性,這裏主要設置了

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