Kafka SASL 安全認(rèn)證

服務(wù)端

  • 在服務(wù)器節(jié)點(diǎn)配置認(rèn)證文件:
    文件路徑:kafka/config/kafka_server_jaas.conf
    文件內(nèi)容:

    KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin"
    user_admin="admin"
    user_rex="123456"
    user_alice="123456"
    user_lucy="123456";
    };
    

    注意配置文件中的兩個分號的位置,多一不可,缺一不可舅踪。

  • 修改服務(wù)器節(jié)點(diǎn)的啟動配置文件:
    復(fù)制 kafka/config/server.propertieskafka/config/server-sasl.properties绕沈,在文件最末尾添加:

    listeners=SASL_PLAINTEXT://localhost:9092
    security.inter.broker.protocol=SASL_PLAINTEXT
    sasl.enabled.mechanisms=PLAIN
    sasl.mechanism.inter.broker.protocol=PLAIN
    authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
    super.users=User:admin
    
  • 修改服務(wù)器節(jié)點(diǎn)的啟動腳本:
    復(fù)制 kafka/bin/kafka-server-start.shkafka/bin/kafka-server-start-sasl.sh,將認(rèn)證信息配置到 kafka 服務(wù)器節(jié)點(diǎn)的 JVM 啟動參數(shù)中:

    if [ "x$KAFKA_OPTS" ]; then
        export KAFKA_OPTS="-Djava.security.auth.login.config=/home/weijie/myprojects/kafka_2.12-2.6.0/config/kafka_server_jaas.conf"
    fi
    
  • 啟動 zookeeper:./bin/zookeeper-server-start.sh config/zookeeper.properties

  • 以安全認(rèn)證的方式啟動 kafka-server:./bin/kafka-server-start-sasl.sh config/server-sasl.properties

  • 創(chuàng)建一個 topic:./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

生產(chǎn)者 + 消費(fèi)者

  • 配置 生產(chǎn)者/消費(fèi)者 的認(rèn)證信息:
    文件路徑:kafka/config/kafka_client_jaas.conf
    文件內(nèi)容:

    KafkaClient {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin";
    };
    

    注意配置文件中的兩個分號的位置融蹂,多一不可旺订,缺一不可弄企。

  • 修改 生產(chǎn)者 的啟動配置文件:
    復(fù)制 kafka/config/producer.propertieskafka/config/producer-sasl.properties
    在文件最末尾添加:

    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=PLAIN
    
  • 修改 消費(fèi)者 的啟動配置文件:
    復(fù)制 kafka/config/consumer.propertieskafka/config/consumer-sasl.properties
    在文件最末尾添加:

    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=PLAIN
    
  • 修改生產(chǎn)者的啟動腳本:
    復(fù)制 kafka/bin/kafka-console-producer.shkafka/bin/kafka-console-producer-sasl.sh,將認(rèn)證信息配置到 kafka 生產(chǎn)者的 JVM 啟動參數(shù)中:

    if [ "x$KAFKA_OPTS" ]; then
      export KAFKA_OPTS="-Djava.security.auth.login.config=/home/weijie/myprojects/kafka_2.12-2.6.0/config/kafka_client_jaas.conf"
    fi
    
  • 修改消費(fèi)者的啟動腳本:
    復(fù)制 kafka/bin/kafka-console-consumer.shkafka/bin/kafka-console-consumer-sasl.sh耸峭,將認(rèn)證信息配置到 kafka 生產(chǎn)者的 JVM 啟動參數(shù)中:

    if [ "x$KAFKA_OPTS" ]; then
      export KAFKA_OPTS="-Djava.security.auth.login.config=/home/weijie/myprojects/kafka_2.12-2.6.0/config/kafka_client_jaas.conf"
    fi
    
  • 以安全認(rèn)證的方式啟動 kafka-producer:./bin/kafka-console-producer-sasl.sh --broker-list localhost:9092 --topic test --producer.config config/producer-sasl.properties
    發(fā)送消息測試:

    生產(chǎn)者發(fā)送消息測試.png

  • 以安全認(rèn)證的方式啟動 kafka-consumer:./bin/kafka-console-consumer-sasl.sh --bootstrap-server localhost:9092 --topic test --consumer.config config/consumer-sasl.properties

    消費(fèi)者接收消息.png

java client

  • maven pom.xml
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.12</artifactId>
    <version>2.6.0</version>
</dependency>
  • java client 中添加 SASL 設(shè)置信息:

    Java client consumer properties配置.png

    注意 sasl.jaas.config 配置中的分號必不可少桩蓉。

    package kafka;
    
    import java.time.Duration;
    import java.util.Arrays;
    import java.util.Properties;
    
    import org.apache.kafka.clients.consumer.ConsumerRecord;
    import org.apache.kafka.clients.consumer.ConsumerRecords;
    import org.apache.kafka.clients.consumer.KafkaConsumer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class TestKafkaSasl {
    
        private static final Logger logger = LoggerFactory.getLogger(TestKafkaSasl.class);
        
        public static void main(String[] args) {
            Properties props = new Properties();
            props.put("bootstrap.servers", "localhost:9092");
            props.put("group.id", "test_group");
            props.put("enable.auto.commit", "true");
            props.put("auto.commit.interval.ms", "1000");
            props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
            props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
            // sasl.jaas.config的配置, 結(jié)尾分號必不可少.
            props.setProperty("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin\";");
            props.setProperty("security.protocol", "SASL_PLAINTEXT");
            props.setProperty("sasl.mechanism", "PLAIN");
    
            @SuppressWarnings("resource")
            KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
            consumer.subscribe(Arrays.asList("test"));
            while (true) {
                try {
                    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));
                    for (ConsumerRecord<String, String> record : records) {
                        System.out.printf("offset = %d, partition = %d, key = %s, value = %s%n",
                              record.offset(), record.partition(), record.key(), record.value());
                        logger.info("offset = {}, partition = {}, key = {}, value = {}",
                              record.offset(), record.partition(), record.key(), record.value());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    logger.error(e.getMessage());
                }
            }
        }
    }
    

    運(yùn)行測試:

    繼續(xù)生產(chǎn)數(shù)據(jù).png
    java client sasl消費(fèi)數(shù)據(jù)測試.png

可能遇到的問題

  • 生產(chǎn)者進(jìn)程啟動報錯

    生產(chǎn)者啟動報錯.png

    解決方案:以安全認(rèn)證的方式啟動 kafka-producer,別忘記添加設(shè)置配置文件參數(shù)劳闹。 ./bin/kafka-console-producer-sasl.sh --broker-list localhost:9092 --topic test --producer.config config/producer-sasl.properties

  • 消費(fèi)者進(jìn)程啟動報錯

    消費(fèi)者啟動報錯.png

    解決方案:以安全認(rèn)證的方式啟動 kafka-consumer院究,別忘記添加設(shè)置配置文件參數(shù)。 ./bin/kafka-console-consumer-sasl.sh --bootstrap-server localhost:9092 --topic test --consumer.config config/consumer-sasl.properties

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本涕,一起剝皮案震驚了整個濱河市业汰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菩颖,老刑警劉巖样漆,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晦闰,居然都是意外死亡放祟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門呻右,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跪妥,“玉大人,你說我怎么就攤上這事声滥∶寄欤” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵落塑,是天一觀的道長纽疟。 經(jīng)常有香客問我,道長憾赁,這世上最難降的妖魔是什么污朽? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮龙考,結(jié)果婚禮上膘壶,老公的妹妹穿的比我還像新娘。我一直安慰自己洲愤,他們只是感情好颓芭,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柬赐,像睡著了一般亡问。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天州藕,我揣著相機(jī)與錄音束世,去河邊找鬼。 笑死床玻,一個胖子當(dāng)著我的面吹牛毁涉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锈死,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼贫堰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了待牵?” 一聲冷哼從身側(cè)響起其屏,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缨该,沒想到半個月后偎行,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贰拿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年蛤袒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膨更。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡妙真,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出询一,到底是詐尸還是另有隱情隐孽,我是刑警寧澤癌椿,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布健蕊,位于F島的核電站,受9級特大地震影響踢俄,放射性物質(zhì)發(fā)生泄漏缩功。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一都办、第九天 我趴在偏房一處隱蔽的房頂上張望嫡锌。 院中可真熱鬧,春花似錦琳钉、人聲如沸势木。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啦桌。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甫男,已是汗流浹背且改。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留板驳,地道東北人又跛。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像若治,于是被迫代替她去往敵國和親慨蓝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359