kafka解决了什么问题?

本文对比了Kafka与Redis PUB/SUB的特点及适用场景。Redis PUB/SUB适用于消息持久性要求不高、吞吐量较小的情况;而Kafka则更适合于需要高可靠性和高吞吐量的应用场景。

个人认为, Kafka与Redis PUB/SUB之间最大的区别在于Kafka是一个完整的系统,而Redis PUB/SUB只是一个套件(utility)——没有冒犯Redis的意思,毕竟它的主要功能并不是PUB/SUB。先说Redis吧,它首先是一个内存数据库,其提供的PUB/SUB功能把消息保存在内存中(基于channel),因此如果你的消息的持久性需求并不高且后端应用的消费能力超强的话,使用Redis PUB/SUB是比较合适的使用场景。比如官网说提供的一个网络聊天室的例子:模拟IRC,因为channel就是IRC中的服务器。用户发起连接,发布消息到channel,接收其他用户的消息。这些对于持久性的要求并不高,使用Redis PUB/SUB来做足矣。而Kafka是一个完整的系统,它提供了一个高吞吐量、分布式的提交日志(由于提供了Kafka Connect和Kafka Streams,目前Kafka官网已经将自己修正为一个分布式的流式处理平台,这里也可以看出Kafka的野心:-)。除了p2p的消息队列,它当然提供PUB/SUB方式的消息模型。而且,Kafka默认提供了消息的持久化,确保消息的不丢失性(至少是大部分情况下)。另外,由于消费元数据是保存在consumer端的,所以对于消费而言consumer被赋予极大的自由度。consumer可以顺序地消费消息,也可以重新消费之前处理过的消息。这些都是Redis PUB/SUB无法做到的。最后总结一下,Redis PUB/SUB使用场景: 1. 消息持久性需求不高2. 吞吐量要求不高3. 可以忍受数据丢失4. 数据量不大Kafka使用场景:上面以外的其他场景:)1. 高可靠性2. 高吞吐量3. 持久性高4. 多样化的消费处理模型

Kafka 集群中使用 **Kafka Broker 的 Principal**,主要是为了实现 Kafka Broker 与 Kerberos KDC 的认证,以及 Kafka Broker 与其他组件(如 Zookeeper、客户端)之间的安全通信。 --- ## ✅ 一、Kafka Broker 的 Principal 是什么? Kafka Broker 的 Principal 是用于标识 Kafka Broker 身份的 Kerberos 主体(Principal),通常格式为: ``` kafka/<broker-fqdn>@REALM ``` 例如: ``` kafka/kafka-broker1.hadoop.com@HADOOP.COM ``` - `kafka`:服务名称(Kafka Broker 使用的服务名) - `kafka-broker1.hadoop.com`:Broker 的 FQDN(完全限定域名) - `HADOOP.COM`:Kerberos Realm --- ## ✅ 二、使用 Kafka Broker 的 Principal 的步骤 ### 步骤 1:在 KDC 中创建 Principal 你需要在 Kerberos KDC 中为每个 Kafka Broker 创建一个服务 Principal: ```bash kadmin.local -q "add -randkey kafka/kafka-broker1.hadoop.com@HADOOP.COM" ``` ### 步骤 2:生成 Keytab 文件 生成包含该 Principal 的 Keytab 文件: ```bash kadmin.local -q "ktadd -k /etc/security/keytabs/kafka.keytab kafka/kafka-broker1.hadoop.com@HADOOP.COM" ``` ### 步骤 3:配置 Kafka Broker 的 JAAS 文件 创建 Kafka Broker 的 JAAS 配置文件,例如 `kafka_server_jaas.conf`: ```conf KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/etc/security/keytabs/kafka.keytab" principal="kafka/kafka-broker1.hadoop.com@HADOOP.COM"; }; ``` ### 步骤 4:配置 Kafka Broker 的 `server.properties` 在 Kafka 的 `server.properties` 文件中启用 Kerberos 安全协议: ```properties # 启用 SASL 认证 sasl.enabled.mechanisms=GSSAPI security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=GSSAPI # 配置 Kerberos Realm kerberos.principal.to.local.rules=RULE:[1:$1@$0](.*@HADOOP.COM)s/@HADOOP.COM// ``` ### 步骤 5:启动 Kafka Broker 并指定 JAAS 配置 在启动 Kafka Broker 时,指定 JAAS 配置和 Kerberos 配置: ```bash export KAFKA_OPTS=" -Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf -Djavax.security.auth.useSubjectCredsOnly=false -Djava.security.krb5.conf=/etc/krb5.conf " bin/kafka-server-start.sh config/server.properties ``` --- ## ✅ 三、Kafka Broker Principal 的用途 | 使用场景 | 说明 | |----------|------| | **Broker 与 KDC 认证** | Kafka Broker 启动时会使用 Principal 向 KDC 获取 Ticket,完成身份认证 | | **Broker 与客户端通信** | 客户端连接 Kafka Broker 时,Broker 会使用该 Principal 与客户端进行相互认证 | | **Broker 与 Zookeeper 通信** | 如果 Zookeeper 也启用了 Kerberos,Kafka Broker 会使用该 Principal 与 Zookeeper 认证 | | **ACL 权限控制** | Kafka 可以基于 Principal 设置 ACL,控制客户端的访问权限 | --- ## ✅ 四、验证 Kafka Broker 是否正确使用 Principal 你可以通过以下方式验证 Kafka Broker 是否成功使用 Principal: ### 1. 查看日志 在 Kafka Broker 启动日志中搜索: ``` INFO Successfully authenticated with Kerberos ``` 或: ``` INFO GSSAPI authentication successful ``` ### 2. 使用 `klist` 查看 Ticket(如果使用缓存) 如果你使用了 Kerberos Ticket Cache,可以使用: ```bash klist ``` 查看当前登录的 Principal。 --- ## ✅ 五、Kafka Broker Principal 与客户端 Principal 的区别 | 项目 | Kafka Broker Principal | 客户端 Principal | |------|-------------------------|------------------| | 示例 | `kafka/kafka-broker1.hadoop.com@HADOOP.COM` | `kafkaclient@HADOOP.COM` | | 类型 | 服务 Principal | 用户 Principal | | 使用者 | Kafka Broker | Kafka Producer/Consumer | | JAAS 配置块 | `KafkaServer` | `KafkaClient` | | 是否绑定主机 | ✅ 是 | ❌ 否 | --- ## ✅ 六、常见问题 ### 1. Kafka Broker 启动失败,提示 Principal not found 原因:KDC 中未创建对应的 Principal 或 Keytab 文件路径错误。 解决方法: - 检查 Principal 是否已添加到 KDC - 检查 Keytab 文件是否存在 - 检查 JAAS 配置中的 `keyTab` 和 `principal` 是否正确 ### 2. Kafka Broker 无法与其他 Broker 通信 原因:`security.inter.broker.protocol` 配置不正确,或未启用 GSSAPI。 解决方法: - 检查 `server.properties` 中是否启用 `SASL_PLAINTEXT` - 确保所有 Broker 使用相同的 JAAS 配置 --- ## ✅ 七、完整配置示例 ### `kafka_server_jaas.conf` ```conf KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/etc/security/keytabs/kafka.keytab" principal="kafka/kafka-broker1.hadoop.com@HADOOP.COM"; }; ``` ### `server.properties` ```properties listeners=SASL_PLAINTEXT://:9092 security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=GSSAPI sasl.enabled.mechanisms=GSSAPI kerberos.principal.to.local.rules=RULE:[1:$1@$0](.*@HADOOP.COM)s/@HADOOP.COM// ``` --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值