前些日子要封装一个kafka的客户端驱动,配置了下kafka环境,发现配置复杂度完爆rabbitmq很多倍啊,而且发布订阅模式使用起来也很麻烦,可能就胜在分布式了吧。

kafka需要java环境,自行安装java sdk 1.8+.

http://kafka.apache.org/downloads

官方加载安装包,当前为kafka_2.11-1.1.0.tgz

(新版kafka包内集成了zookeeper,直接启动即可)

解压缩后kafka目录下文件:

配置:

  config路径下配置文件:

    consumer.properites 消费者配置,这个配置文件用于配置开启的消费者,默认即可

    producer.properties 生产者配置,这个配置文件用于配置开启的生产者,默认即可

    server.properties kafka服务器的配置,此配置文件用来配置kafka服务器,核心配置如下:

     (1)broker.id 申明当前kafka服务器在集群中的唯一ID,需配置为integer,并且集群中的每一个kafka服务器的id都应是唯一的,默认即可

     (2)listeners 申明此kafka服务器需要监听的端口号,如果是在本机上跑虚拟机运行可以不用配置本项,默认会使用localhost的地址,如果是在远程服务器上运行则必须配置,

        例如:listeners=PLAINTEXT:// 192.168.1.1:9092。并确保服务器的9092端口能够访问

     (3)zookeeper.connect 申明kafka所连接的zookeeper的地址 ,需配置为zookeeper的地址,由于本次使用的是kafka高版本中自带zookeeper,默认即可,

        例如:zookeeper.connect=localhost:2181

启动zookeeper:

  bin/zookeeper-server-start.sh config/zookeeper.properties & (&代表后台运行)

启动kafka:

  bin/kafka-server-start.sh config/server.properties &

创建一个名为test的topic:

  bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

查看已经创建的topic:

  bin/kafka-topics.sh --list --zookeeper localhost:2181

更改tioic分区:

  bin/kafka-topics.sh --zookeeper localhost:2181 --topic test --alter --partitions 4

查看指定topic信息:

  bin/kafka-topics.sh --zookeeper localhost:2181 --topic test --describe

创建一个消息消费者:

  bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

  (如果弹出WARN [Producer clientId=console-producer] Connection to node -1 could not be established. Broker may not be available,需将上文中localhost改为队列配置的地址)

创建一个消息生产者:

  bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

  出现 > 符号后输入消息发送,消费者连接可以看到输出。

 (如果弹出WARN [Consumer clientId=consumer-1, groupId=console-consumer-59948] Connection to node -1 could not be established. Broker may not be available,

  需将上文中localhost改为队列配置的地址)

Kafka安装完成。

Kafka开启使用 SASL_PLAINTEXT认证:

  输入下面命令,关闭kafka:

    bin/kafka-server-stop.sh

  输入下面命令,关闭zookeeper:

    bin/zookeeper-server-stop.sh

  进入config目录,增加如下配置文件:

    cd config

    (1)touch kafka_server_jaas.conf

      配置如下:

        KafkaServer {

        org.apache.kafka.common.security.plain.PlainLoginModule required

        username="admin"

        password="admin"

        user_admin="admin"

        user_alice="alice";

        };

      在KafkaServer部分,username和password是broker用于初始化连接到其他的broker,在上面配置中,admin用户为broker间的通讯,

      user_userName定义了所有连接到 broker和 broker验证的所有的客户端连接包括其他 broker的用户密码,user_userName必须配置admin用户,否则报错。  

    (2)touch kafka_cilent_jaas.conf

      配置如下:

        KafkaClient {

        org.apache.kafka.common.security.plain.PlainLoginModule required

        username="admin"

        password="admin";

        };

      在KafkaClient部分,username和password是客户端用来配置客户端连接broker的用户,在上面配置中,客户端使用admin用户连接到broker。 

  更改server.properties配置文件:

    listeners=SASL_PLAINTEXT://ip:9092

    # 使用的认证协议

    security.inter.broker.protocol=SASL_PLAINTEXT

    #SASL机制

    sasl.enabled.mechanisms=PLAIN

    sasl.mechanism.inter.broker.protocol=PLAIN

    # 完成身份验证的类

    authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

    # 如果没有找到ACL(访问控制列表)配置,则允许任何操作。

    #allow.everyone.if.no.acl.found=true

    super.users=User:admin

  修改consuer和producer的配置文件consumer.properties和producer.properties,分别增加如下配置:

    security.protocol=SASL_PLAINTEXT

    sasl.mechanism=PLAIN

  切换到kafka目录下bin路径:

    cd ..

    cd bin

  JAAS文件作为每个broker的jvm参数,在kafka-server-start.sh脚本中增加如下配置(可在最上面):

    export KAFKA_OPTS=" -Djava.security.auth.login.config=/data/kafka/kafka_2.11-1.1.0/config/kafka_server_jaas.conf"

  在kafka-console-consumer.sh和kafka-console-producer.sh中添加:

    export KAFKA_OPTS=" -Djava.security.auth.login.config=/data/kafka/kafka_2.11-1.1.0/config/kafka_client_jaas.conf"

    

  启动zookeeper和kafka:

    bin/zookeeper-server-start.sh config/zookeeper.properties & (&代表后台运行)

    bin/kafka-server-start.sh config/server.properties &

  输入命令,启动生产者:

    bin/kafka-console-producer.sh --broker-list 10.100.17.79:9092 --topic test --producer.config config/producer.properties

  输入命令,启动消费者

    bin/kafka-console-consumer.sh --bootstrap-server 10.100.17.79:9092 --topic test --from-beginning --consumer.config config/consumer.properties

  如果消费者启动不了或者无法消费指定topic,尝试设置所使用用户的组权限(当前使用用户admin为超级用户,不需要配置权限):

    利用kafka-acls.sh为topic设置ACL:

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ip:2181 --add --allow-principal  User:admin  --group test-consumer-group --topic test

  注意,如果admin要作为消费端连接alice-topic的话,必须对其使用的group(test-consumer-group)也赋权(group 在consumer.properties中有默认配置group.id)

  权限操作例子:

    增加权限:

      # 为用户 alice 在 test(topic)上添加读写的权限

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ip:2181 --add --allow-principal User:alice --operation Read --operation Write --topic test

      # 对于 topic 为 test 的消息队列,拒绝来自 ip 为192.168.1.100账户为 zhangsan 进行 read 操作,其他用户都允许

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ip:2181 --add --allow-principal User:* --allow-host * --deny-principal User:zhangsan

       --deny-host 192.168.1.100 --operation Read --topic test

      # 为 zhangsan 和 alice 添加all,以允许来自 ip 为192.168.1.100或者192.168.1.101的读写请求

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ip:2181 --add --allow-principal User:zhangsan --allow-principal User:alice --allow-host 192.168.1.100 --allow-host 192.168.1.101 --operation Read --operation Write --topic test

    获取权限列表:

      # 列出 topic 为 test 的所有权限账户

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ip:2181 --list --topic test

    移除权限:

      # 移除 acl

      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ip:2181 --remove --allow-principal User:zhangsan --allow-principal User:Alice --allow-host 192.168.1.100 --allow-host 192.168.1.101 --operation Read --operation Write --topic test

以上完成Kafka的SASL_PLAINTEXT认证。

多节点zookeeper下认证:

  增加配置文件:

    touch kafka_zoo_jaas.conf

    配置如下:

      ZKServer{

      org.apache.kafka.common.security.plain.PlainLoginModule required

      username="admin"

      password="admin"

      user_admin="admin";

      };

    配置应用名称为ZKServer,zookeeper默认使用的JAAS应用名称是Server(或者zookeeper)。

  设置的环境变量其实只是传入到JVM的参数。这里设置的环境变量是KAFKA_OPTS。修改zookeeper的启动脚本zookeeper-server-start.sh如下:

    export KAFKA_OPTS=" -Djava.security.auth.login.config=/data/kafka/kafka_2.11-1.1.0/config/kafka_zoo_jaas.conf  -Dzookeeper.sasl.serverconfig=ZKServer"

  如果配置使用默认名称,则只需要添加:

    export KAFKA_OPTS=" -Djava.security.auth.login.config=/data/kafka/kafka_2.11-1.1.0/config/kafka_zoo_jaas.conf“”

  修改zookeeper.properties配置文件,增加配置:

    authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider

    requireClientAuthScheme=sasl

    jaasLoginRenew=3600000

以上配置完成后可启动尝试多节点zookeeper身份认证

  

Kafka安装及开启SASL_PLAINTEXT认证(用户名和密码认证)的更多相关文章

  1. 实战:Nginx如何让用户通过用户名和密码认证访问WEB站点

    有时我们会有这么一种需求,就是你的网站并不想提供一个公共的访问或者某些页面不希望公开,我们希望的是某些特定的客户端可以访问.那么我们可以在访问时要求进行身份认证,就如给你自己的家门加一把锁,以拒绝那些 ...

  2. 安装WAMP 及 修改MYSQL用户名 、 密码

    1,下载并安装WAMP 2,启动服务后,找到MYSQL--MYSQL console--弹出命令窗口(刚开始没有初始用户名跟密码,可直接回车执行) 3,首先输入 use mysq;l---然后修改用户 ...

  3. git push跳过用户名和密码认证配置教程

    在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构. 新 ...

  4. [na]802.1x协议无线认证协议&dot1x有线认证实验

    以前搞无线时候,会涉及到无线client接入方式的认证协议. 认证方式+加密方式+有线的dot1x. 注:以前都是doc粘贴到博客的,加上没写博客的习惯,因此会比较乱. EAP(扩展认证协议)是什么? ...

  5. 【IIS转】:解决IIS下localhost访问需要输入用户名和密码的问题

    [摘要]安装完IIS后,我们可能会发现浏览器输入localhost访问时提示我们输入用户名和密码,本文介绍了这种问题的解决方法,方便站长们调试自己的程序. 在我们的WIN XP系统中安装了IIS,但是 ...

  6. 解决IIS下localhost访问需要输入用户名和密码的问题

    [摘要]安装完IIS后,我们可能会发现浏览器输入localhost访问时提示我们输入用户名和密码,本文介绍了这种问题的解决方法,方便站长们调试自己的程序.     在我们的WIN XP系统中安装了II ...

  7. Oracle用户密码认证方式

    oracle用户有两种认证方式: 操作系统认证(要求该用户属于本地DBA组,然后通过操作系统认证登录oracle,从而启动数据库) 密码文件认证 oracle使用哪种认证方式决定在于两个参数: 1.r ...

  8. kafka安装教程

    今天需要在新机器上安装一个kafka集群,其实kafka我已经装了十个不止了,但是没有一个是为生产考虑的,因此比较汗颜,今天好好地把kafka的安装以及配置梳理一下: 1,kafka版本选取: 现在我 ...

  9. Windows7安装Bitvise开启ssh服务

    Windows7安装Bitvise开启ssh服务 by:铁乐猫 在Liunx和windows10上配置SSH服务是一件很容易的事,毕竟系统己经自带了ssh的服务功能. 不过在windows7上可不容易 ...

随机推荐

  1. 右键菜单添加包含ICON图片的快捷打开方式

    右键菜单添加包含ICON图片的快捷打开方式: ①保存如下代码为“submit.reg”, ②修改对应的程序地址 ③双击创建的文件,导入到注册表中,即可 Windows Registry Editor ...

  2. jmeter 上传附件脚本报Non HTTP response code: java.io.FileNotFoundException

    如果上传附件报如下错误,就需要把附件放到和脚本同一路径下就解决了

  3. Mac 10.13.6 安装 cocoapods

    卸载pod sudo rm -fr ~/Library/Caches/CocoaPods/ sudo rm -fr ~/.cocoapods/repos/master/ sudo rm -fr Pod ...

  4. Python:从入门到实践--第三章--列表简介--练习

    #1.将一些朋友的姓名存储在一个列表中,并将其命名为friends.依次访问该列表中的每个元素,从而将每个朋友的姓名都打印出来. #2.继续使用1中的列表,为每人打印一条消息,每条消息包含相同的问候语 ...

  5. HDU 6181:Two Paths(次短路)

    Two Paths Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 153428/153428 K (Java/Others) Total S ...

  6. utils工具类

    使用工具类的方法 目录结构 o代表项目层 util.js 用promise避免异步获取不到数据的问题 注意module.exports var APIURL = ''; function getApi ...

  7. VBA随机地牢生成

    无聊啊--于是,我想做一个随机地图. 但是我很懒,不想做. 但是身体很诚实. 这次是直接在Excel中制作的地图,但是,VB的执行效率很慢,我代码的效率也很慢,导致,一旦地图长宽稍大,就会出现好几分钟 ...

  8. 20175202 《Java程序设计》第八周学习总结

    20175202 2018-2019-2 <Java程序设计>第八周学习总结 教材知识点总结 1.泛型: 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 泛型类的声 ...

  9. docker 创建docker用户组,应用用户加入用户组

    在Linux系统下使用docker,为了避免每次输入命令都需要sudo,可以把用户加入docker用户组 创建docker用户组 sudo groupadd docker 普通用户加入docker用户 ...

  10. 两台Linux服务器之间复制文件

    一.scp 1.简介 scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的 2.软件安装 ...