Kafka基於docker-compose單結點部署SASL_PLAINTEXT

Kafka基於docker-compose單結點部署SASL_PLAINTEXT

背景

Kafka是一個分佈式流處理平臺,由LinkedIn開發並開源,如今在多個行業中都有廣泛的應用。以下是Kafka的當前用途以及行業應用的詳細描述:

**Kafka的用途**:

1. **消息隊列**:Kafka最常見的用途之一是作爲高性能的消息隊列,用於解耦應用程序的各個部分之間的通信。通過將消息發送到Kafka主題,不同的應用程序可以異步地交換數據,並且可以根據需要調整消費速率和處理能力。這種解耦方式使得系統更加靈活,易於擴展和維護。
2. **日誌收集和分析**:Kafka也被廣泛用於收集和存儲大規模系統產生的日誌數據。生產者將日誌消息發送到Kafka主題,然後可以使用消費者實時消費和分析這些日誌數據,進行監控、報警、分析和故障排查等操作。
3. **事件驅動架構**:Kafka提供了一種可靠的事件流平臺,用於構建事件驅動架構(EDA)。通過將事件發送到Kafka主題,並使用流處理工具(如Kafka Streams),可以實現事件的實時處理和響應。
4. **實時數據處理**:Kafka可以構建實時數據處理系統,接收並傳輸大量實時數據,與多種流處理框架如Apache Storm、Apache Flink結合,實現高吞吐量和低延遲處理。

**Kafka的行業應用**:

1. **金融行業**:Kafka在金融行業中的應用非常廣泛,特別是在處理實時交易數據、風控分析以及市場數據分發等方面。金融機構可以利用Kafka實現高效的數據傳輸和實時分析,從而快速響應市場變化並做出決策。
2. **電商行業**:在電商領域,Kafka被用於處理訂單數據、用戶行爲數據以及商品推薦等場景。通過實時收集和分析這些數據,電商企業可以優化用戶體驗、提升轉化率並實現精準營銷。
3. **物聯網行業**:隨着物聯網設備的普及,Kafka在物聯網領域的應用也日益增多。它可以接收並處理各種傳感器數據,如溫度、溼度和氣壓等,實現數據的實時分析和監控。
4. **日誌管理**:Kafka支持集中式日誌收集,將生成的各類日誌數據集中存儲,以便後續進行實時或離線的分析。通過將數據發送到主題,可實現高效的處理。
5. **數據備份與複製**:Kafka提供數據備份與複製的機制,能將數據複製到多個Kafka集羣,確保高可用性和容錯性,尤其適用於需要數據可靠性和持久性的應用如分佈式數據庫和文件系統。

SASL PLAINTEXT是一種認證機制,用於Kafka集羣中保護數據傳輸的安全性。它基於SASL(Simple Authentication and Security Layer)框架,使用明文密碼進行身份驗證。儘管在傳輸過程中,SASL協議會對數據進行加密,但由於客戶端發送的用戶名和密碼是未加密的,因此,SASL PLAINTEXT被認爲是一種不太安全的認證方式。然而,它仍然被廣泛採用,尤其在測試環境中,或對於配置和運維成本要求較小的小型公司中的Kafka集羣。

SASL是一種用來擴充C/S驗證模式的認證機制,它規範了Client和Server之間的應答過程以及傳輸內容的編碼方法。SASL驗證架構決定了服務器如何存儲客戶端身份證書以及如何覈驗客戶端提供的密碼。一旦客戶端通過驗證,服務器端就能確定用戶的身份,並據此決定用戶具有的權限。

在Kafka中,SASL PLAINTEXT認證通常與SSL加密搭配使用,以提高安全性。在使用SASL PLAINTEXT認證時,需要對Kafka服務器和客戶端進行相應的配置。例如,在Kafka服務器的配置文件中,需要設置監聽地址、協議類型以及認證機制等參數。而在Kafka客戶端上,則需要配置認證信息,如用戶名和密碼等。

請注意,儘管SASL PLAINTEXT在某些場景下可能適用,但在對安全性要求較高的生產環境中,建議使用更爲安全的認證方式,如SASL/GSSAPI(Kerberos)或SASL/SCRAM等。這些認證方式提供了更強的密碼加密和動態更新機制,能夠更好地保護Kafka集羣中的數據安全。

方案

密碼生成器

https://www.avast.com/zh-cn/random-password-generator

兩個關鍵核心配置文件

server_jaas.conf

Client {
     org.apache.zookeeper.server.auth.DigestLoginModule required
     username = "admin"
     password = "RvB9SuYrJMPR";
};
Server {
     org.apache.zookeeper.server.auth.DigestLoginModule required
     username = "admin"
     password = "RvB9SuYrJMPR"
     user_super = "RvB9SuYrJMPR"
     user_admin = "RvB9SuYrJMPR";
};
KafkaServer {
     org.apache.kafka.common.security.plain.PlainLoginModule required
     username = "admin"
     password = "RvB9SuYrJMPR"
     user_admin = "RvB9SuYrJMPR";
};
KafkaClient {
     org.apache.kafka.common.security.plain.PlainLoginModule required
     username = "admin"
     password = "RvB9SuYrJMPR";
};


zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/zookeeper-3.4.13/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
#
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1

## 開啓SASl關鍵配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider

requireClientAuthScheme=sasl

jaasLoginRenew=3600000
zookeeper.sasl.client=true


對以下字符串base64加密,https://www.base64decode.org/ 實現簡單encode

sasl.mechanism: PLAIN
       security.protocol: SASL_PLAINTEXT
       sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username='admin' password='RvB9SuYrJMPR';


kafdrop

**obsidiandynamics/kafdrop是一個Kafka開源可視化工具**,它提供了Web UI界面,用於查看Kafka主題和瀏覽消費者組。通過這個工具,用戶可以顯示代理、主題、分區、消費者等信息,並且可以預覽topic消息。Kafdrop支持Windows平臺環境,並且幾乎不需要配置,只需通過簡單的命令即可運行。在Docker環境下,用戶可以搜索並拉取obsidiandynamics/kafdrop鏡像,然後通過一系列配置命令啓動Kafdrop服務。啓動後,用戶可以通過訪問指定的Web頁面來查看和管理Kafka的相關信息。

因此,obsidiandynamics/kafdrop的主要作用是爲用戶提供一個直觀、便捷的方式來查看和管理Kafka集羣的狀態和數據,從而方便用戶對Kafka進行監控和維護。


最後我們的docker-compose.yaml文件是這樣的:

version: '3.8'
services:
   zookeeper:
     image: wurstmeister/zookeeper
     volumes:
        - ./data/zookeeper:/data
        - ./config:/opt/zookeeper-3.4.13/conf
        - ./config:/opt/zookeeper-3.4.13/secrets
     container_name: zookeeper
     environment:
       ZOOKEEPER_CLIENT_PORT: 2181
       ZOOKEEPER_TICK_TIME: 2000
       SERVER_JVMFLAGS: -Djava.security.auth.login.config=/opt/zookeeper-3.4.13/secrets/server_jaas.conf
     ports:
       - 2181:2181
     restart: always
   kafka:
     image: wurstmeister/kafka
     container_name: kafka
     depends_on:
       - zookeeper
     ports:
       - 9092:9092
     volumes:
       - ./data/kafka:/kafka
       - ./config:/opt/kafka/secrets
     environment:
       KAFKA_BROKER_ID: 0
       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
       KAFKA_LISTENERS: INTERNAL://:9093,EXTERNAL://:9092
       KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9093,EXTERNAL://172.18.0.155:9092
       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT
       ALLOW_PLAINTEXT_LISTENER: 'yes'
       KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
       KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
       KAFKA_SASL_ENABLED_MECHANISMS: PLAIN
       KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN
       KAFKA_OPTS: -Djava.security.auth.login.config=/opt/kafka/secrets/server_jaas.conf
     restart: always
  ##  kafdrop 監控kafka的Ui工具
   kafdrop:
     image: obsidiandynamics/kafdrop
     restart: always
     ports:
        - "19001:9000"
     environment:
        KAFKA_BROKERCONNECT: "kafka:9093"
     ## 如kafka開啓了sasl認證後以下 sasl認證鏈接是必要的,下面的事經過base64加密後的結果
        KAFKA_PROPERTIES: c2FzbC5tZWNoYW5pc206IFBMQUlOCiAgICAgIHNlY3VyaXR5LnByb3RvY29sOiBTQVNMX1BMQUlOVEVYVAogICAgICBzYXNsLmphYXMuY29uZmlnOiBvcmcuYXBhY2hlLmthZmthLmNvbW1vbi5zZWN1cml0eS5zY3JhbS5TY3JhbUxvZ2luTW9kdWxlIHJlcXVpcmVkIHVzZXJuYW1lPSdhZG1pbicgcGFzc3dvcmQ9J1J2QjlTdVlySk1QUic7
     depends_on:
       - zookeeper
       - kafka
     cpus: '1'
     mem_limit: 1024m
     container_name: kafdrop


源代碼

https://github.com/megadotnet/Kafka-docker-compose/tree/main/Kafka-Docker-Compose-SASL_PLAINTEXT


參考

https://docs.confluent.io/platform/current/kafka/authentication_sasl/authentication_sasl_plain.html

https://github.com/obsidiandynamics/kafdrop



今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管理,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟件工程的迷思
企業項目化管理介紹
軟件項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
項目管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
互聯網數據庫架構設計思路
IT基礎架構規劃方案一(網絡系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變
Openshift與Kubernetes的區別

如有想了解更多軟件設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關注我的微信訂閱號:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發佈在我的獨立博客中-Petter Liu Blog。

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