Kafka核心技术与实战
胡夕
人人贷计算平台部总监,Apache Kafka Contributor
立即订阅
8408 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学习Kafka?
免费
Kafka入门 (5讲)
01 | 消息引擎系统ABC
02 | 一篇文章带你快速搞定Kafka术语
03 | Kafka只是消息引擎系统吗?
04 | 我应该选择哪种Kafka?
05 | 聊聊Kafka的版本号
Kafka的基本使用 (3讲)
06 | Kafka线上集群部署方案怎么做?
07 | 最最最重要的集群参数配置(上)
08 | 最最最重要的集群参数配置(下)
客户端实践及原理剖析 (14讲)
09 | 生产者消息分区机制原理剖析
10 | 生产者压缩算法面面观
11 | 无消息丢失配置怎么实现?
12 | 客户端都有哪些不常见但是很高级的功能?
13 | Java生产者是如何管理TCP连接的?
14 | 幂等生产者和事务生产者是一回事吗?
15 | 消费者组到底是什么?
16 | 揭开神秘的“位移主题”面纱
17 | 消费者组重平衡能避免吗?
18 | Kafka中位移提交那些事儿
19 | CommitFailedException异常怎么处理?
20 | 多线程开发消费者实例
21 | Java 消费者是如何管理TCP连接的?
22 | 消费者组消费进度监控都怎么实现?
深入Kafka内核 (5讲)
23 | Kafka副本机制详解
24 | 请求是怎么被处理的?
25 | 消费者组重平衡全流程解析
26 | 你一定不能错过的Kafka控制器
27 | 关于高水位和Leader Epoch的讨论
管理与监控 (12讲)
28 | 主题管理知多少?
29 | Kafka动态配置了解下?
30 | 怎么重设消费者组位移?
31 | 常见工具脚本大汇总
32 | KafkaAdminClient:Kafka的运维利器
33 | Kafka认证机制用哪家?
34 | 云环境下的授权该怎么做?
35 | 跨集群备份解决方案MirrorMaker
36 | 你应该怎么监控Kafka?
37 | 主流的Kafka监控框架
38 | 调优Kafka,你做到了吗?
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
高级Kafka应用之流处理 (3讲)
40 | Kafka Streams与其他流处理平台的差异在哪里?
41 | Kafka Streams DSL开发实例
42 | Kafka Streams在金融领域的应用
结束语 (1讲)
结束语 | 以梦为马,莫负韶华!
特别放送 (2讲)
加餐 | 搭建开发环境、阅读源码方法、经典学习资料大揭秘
用户故事 | 黄云:行百里者半九十
Kafka核心技术与实战
登录|注册

33 | Kafka认证机制用哪家?

胡夕 2019-08-17
你好,我是胡夕。今天我要和你分享的主题是:Kafka 的认证机制。

什么是认证机制?

所谓认证,又称“验证”“鉴权”,英文是 authentication,是指通过一定的手段,完成对用户身份的确认。认证的主要目的是确认当前声称为某种身份的用户确实是所声称的用户。
在计算机领域,经常和认证搞混的一个术语就是授权,英文是 authorization。授权一般是指对信息安全或计算机安全相关的资源定义与授予相应的访问权限。
举个简单的例子来区分下两者:认证要解决的是你要证明你是谁的问题,授权要解决的则是你能做什么的问题。
在 Kafka 中,认证和授权是两套独立的安全配置。我们今天主要讨论 Kafka 的认证机制,在专栏的下一讲内容中,我们将讨论授权机制。

Kafka 认证机制

自 0.9.0.0 版本开始,Kafka 正式引入了认证机制,用于实现基础的安全用户认证,这是将 Kafka 上云或进行多租户管理的必要步骤。截止到当前最新的 2.3 版本,Kafka 支持基于 SSL 和基于 SASL 的安全认证机制。
基于 SSL 的认证主要是指 Broker 和客户端的双路认证(2-way authentication)。通常来说,SSL 加密(Encryption)已经启用了单向认证,即客户端认证 Broker 的证书(Certificate)。如果要做 SSL 认证,那么我们要启用双路认证,也就是说 Broker 也要认证客户端的证书。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(15)

  • lmtoo
    No JAAS configuration section named 'Client' was found in specified JAAS configuration file: '/usr/local/kafka/config/kafka-broker.jaas'. Will continue connection to Zookeeper server without SASL authentication, if Zookeeper server allows it.
    2019-08-17
    1
    2
  • 明翼
    老师说的这SCRAM认证用户名和密码直接保存在zookeeper上的,如果zookeeper不做安全控制,岂不是失去意义了?目前我们没有做认证的,研究过一段时间的ssl认证,很麻烦,还影响性能

    作者回复: 不是明文保存的。当然做ZooKeeper的认证也是很有必要的

    2019-08-17
    2
  • 其实我很屌
    老师你好,我们生产上kafka总是发生leader切换,频率大概和zk fsync的告警日志一致,请问有经验吗?zk隔一段时间会有个fsync慢的告警日志,然后差不多同一个时间点,收到partition leader切换的告警

    作者回复: 查看一下磁盘的性能,以及可以查一下文件系统的vm.dirty_ratio,看看是不是flush频率过高导致的

    2019-08-19
    1
  • HuAng
    做了认证后,使用 bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic test 创建主题失败
    提示错误:
    [2019-12-08 12:20:39,172] INFO [SocketServer brokerId=0] Failed authentication with /127.0.0.1 (Unexpected Kafka request of type METADATA during SASL handshake.) (org.apache.kafka.common.network.Selector)
    [2019-12-08 12:20:39,587] INFO [SocketServer brokerId=0] Failed authentication with /127.0.0.1 (Unexpected Kafka request of type METADATA during SASL handshake.) (org.apache.kafka.common.network.Selector)
    [2019-12-08 12:20:39,998] INFO [SocketServer brokerId=0] Failed authentication with /127.0.0.1 (Unexpected Kafka request of type METADATA during SASL handshake.) (org.apache.kafka.common.network.Selector)

    作者回复: 什么版本的Kafka呢?另外是否设置了security.protocol=sasl_plaintext

    2019-12-08
  • pain
    这个应该用的不多吧
    2019-11-26
  • James
    还没做过,后续应该会做
    2019-11-19
  • 昀溪
    顺序是Broker是停止的,然后修改配置文件,创建用户,之后启动Broker。

    我是单台环境 2.2.0
    Broker server.properties 除了下面的其他都是默认配置

    listeners=SASL_PLAINTEXT://172.16.247.100:9092
    sasl.enabled.mechanisms=SCRAM-SHA-256
    sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
    security.inter.broker.protocol=SASL_PLAINTEXT

    # 这里我使用的是sasl.jaas.config配置形式,而不是kafka_server_jaas.conf形式
    # 官网中http://kafka.apache.org/documentation/#security_jaas_broker支持这种配置方式
    listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
       username="admin" \
       password="admin-secret";

    创建admin账号
    ./kafka-configs.sh --zookeeper localhost:2181 --alter --add-config \
    'SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]' \
    --entity-type users --entity-name admin

    创建完我再ZK中的 config\users节点可以看到这个用户.

    启动后的server.log,日志里kafka成功注册到zk节点
    [2019-10-24 10:25:52,210] INFO Registered broker 0 at path /brokers/ids/0 with addresses: ArrayBuffer(EndPoint(172.16.247.100,9092,ListenerName(SASL_PLAINTEXT),SASL_PLAINTEXT)), czxid (broker epoch): 148 (kafka.zk.KafkaZkClient)

    [2019-10-24 10:25:52,462] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
    [2019-10-24 10:25:52,582] INFO [SocketServer brokerId=0] Failed authentication with /172.16.247.100 (Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256) (org.apache.kafka.common.network.Selector)
    [2019-10-24 10:25:52,583] INFO [Controller id=0, targetBrokerId=0] Failed authentication with srv01.contoso.com/172.16.247.100 (Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256) (org.apache.kafka.common.network.Selector)
    [2019-10-24 10:25:52,584] ERROR [Controller id=0, targetBrokerId=0] Connection to node 0 (srv01.contoso.com/172.16.247.100:9092) failed authentication due to: Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256 (org.apache.kafka.clients.NetworkClient)

    作者回复: 我觉得你可以试一下jaas文件的方式,看看整个流程能否走通。如果可以,说明还是参数指定jaas设置的问题。总之先窄化可能的问题点

    2019-10-24
    1
  • 昀溪
    老师我按上面的方式配置,Kafka起来了,但是日志全是错误
    [2019-10-23 14:46:39,465] ERROR [Controller id=0, targetBrokerId=0] Connection to node 0 (srv01.contoso.com/172.16.247.100:9092) failed authentication due to: Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256 (org.apache.kafka.clients.NetworkClient)
    [2019-10-23 14:46:39,578] INFO [SocketServer brokerId=0] Failed authentication with /172.16.247.100 (Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256) (org.apache.kafka.common.network.Selector)
    [2019-10-23 14:46:39,578] INFO [Controller id=0, targetBrokerId=0] Failed authentication with srv01.contoso.com/172.16.247.100 (Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256) (org.apache.kafka.common.network.Selector)

    作者回复: 能把配置的命令发下吗?

    2019-10-23
    1
  • 昀溪
    老师,您讲的上面的例子中,reader和writer用户只是做了认证,没有做授权,它们默认的权限是什么呢?如果不授权就能收发消息么?

    作者回复: 默认没有任何权限。不授权不能收发消息

    2019-10-23
  • godtrue
    打卡,中间学习有断档,感觉模式了,学习还是得持续+专注。
    2019-09-23
  • 知易
    老师求助,,win10环境
    执行命令:
    .\bin\windows\kafka-configs.bat --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=admin],SCRAM-SHA-512=[password=admin]' --ent
    ity-type users --entity-name admin
    报错如下:
    requirement failed: Unknown Dynamic Configuration: Set('SCRAM-SHA-256).
    网上搜了很久,没有找到解决方案,,请老师解惑。感谢

    作者回复: 似乎是个已知问题,最好不要在Windows平台上跑Kafka,问题超多而且还无法解决

    2019-08-28
    1
  • 🤡
    老胡,看到你的博客园了,什么时候把你的博客地址全分享出来,让大家学习下呗
    2019-08-23
  • Nic-愛
    老师,对于多个消费者,每个消费者分配的消息数量一样,每个消费者消费完的数据最快和最慢的大概有3s的差距,出现这个消费快慢差距会有哪些原因呢

    作者回复: 如果你确定是3s的差距,看看是不是这个consumer参数导致的:group.initial.rebalance.delay.ms。当前这个参数值默认是3秒。

    2019-08-19
  • Geek_edc612
    (1)之前做kafak/ Sasl-Plain认证,几经转折才发现,这个认证用户跟linux用户名没关系,而且不能动态添加减少用户,最重要的是租户可以自己修改acl权限,目前也只是把客户端的kafka-topics.sh给禁用了,一叶障目吧,=。=;
    (2)还有就是sasl-plain这个acl权限感觉肯定,明明给认证用户a赋予了所有topic的在所有host的读写权限,但重启时发现有部分topic突然无法消费写入了,提示没权限,再重启就好了;
    (3)接(2)情况,还有就是用kafka-acls.sh去查看topic的所有acl权限时,有的acl完全为空,但是用户a还能写入消费数据,这块完全不懂
    (4)目前kafa-acls.sh 只是用的基础的 Write和Read权限,像Cluster这个权限不知道干啥用的,其他的了解也不深入
    (5)最后就是做kafka sasl plain 认证的时候给zk也加了认证,具体如下:
    zkserver.sh加入这个
    "-Djava.security.auth.login.config=/opt/beh/core/zookeeper/conf/kafka_zoo_jaas.conf" \
    zoo.cfg加入这个:
    authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
    requireClientAuthScheme=sasl
    jaasLoginRenew=3600000
    但是有点疑惑的就是不知道zk 这个认证是用在那块的?我发现加不加kafka sasl plain都能正常用
    2019-08-19
  • 玉剑冰锋
    胡老师,kafka平滑升级后面会讲吗?

    作者回复: 可能涉及不是很多。有什么问题只管问吧

    2019-08-19
收起评论
15
返回
顶部