Kafka 大揭秘:从安装起步,踏入流式处理的奇妙天地
最近项目上要求不能使用自建的kafka集群,要求使用华为云的MRS,由于之前没有了解过kafka的安全相关的东西,所以在使用华为云和改造过程中只依赖华为云官方提供的文档和示例代码导致非常痛苦。翻看kafka的官方文档发现也有安全相关的东西,而且基础的东西和华为云的MRS有很大的关系,很所以有了这一篇文章。本文章可以作为kafka的一个入门文章,也可以作为kafka安全认证(kerberos)的学习文章,同时对使用华为云MRS但是对kafka安全认证没有了解的人群。
一.Kafka介绍和安装
kafka官方文档地址:Apache KafkaKafka是一个事件流平台,为什么这样说
1.发布(写入)和订阅(读取)事件流。也就是说,一方面你可以将事件以流的形式发布出去,供其它部分使用,同时也可以订阅其它事件流,获取数据。
2.持久,可靠的存储时间流。发布到kafka的事件流,kafka可以进行持久存储。
3.在事件发生时或事件发生后对事件进行处理。也就是说可以当事件流进入到kafka后,可以对这些事件进行实时处理,例如实时获取一个房间温度;也可以在事件发生以后再对事件进行处理,例如对某个房间在某个时间段内的平均温度。
1.kafka的主要概念和术语
kafka broker:一台或多台安装了kafka的的服务器,组成一个或多个kafka集群,负责存储、接收、转发消息(事件)。
生产者:将消息(事件)发布到kafka broker的客户端应用程序。
消费者:从kafka broker读取消息(事件)的客户端应用程序。
主题:每种类型的消息都存在不同的主题中,我们可以将每个主题理解为文件夹,每个文件夹中存着不同类型的文件。副本:kafka为了提高可用性和容错性,我们可以为每个主题都创建副本,这样当kafka某个节点发生出现问题,kafka不会丢失数据。分区:kafka为了可伸缩性,将主题分为多个分区,实际上消息是存储在分区中的,上面提到的副本实际上也是每个分区会有副本。例如:我们有一个存储成绩的需求,现在我手里有一台电脑,一个移动硬盘(这里的电脑和移动硬盘理解为kafka broker),我们在电脑上创建了一成绩的文件夹(主题),又在成绩文件夹下边创建了班级文件夹(分区)班级文件夹下放着各自班级的成绩。我们把“成绩”这个文件夹复制到了移动硬盘中(副本)这就是主题,分区,副本的一个关系。

2.kafka安装
早期的kafka依赖于zookeeper集群进行元数据的管理,后面kafka提供了KRaft 模式,使kafka自己管理元数据,减少kafka对zookeeper的依赖,使kafka集群的管理简单高效,我这里还是以zookeeper的管理kafka集群的元数据进行安装。
对于KRaft模式可以参考官网:Apache Kafka
这里以安装kafka_2.11-2.4.0版本和apache-zookeeper-3.5.5(kafka和zookeeper的版本需要满足一定的版本关系,可以参考archive.apache.org/dist/kafka/2.4.0/RELEASE_NOTES.html)
前提条件:需要已经安装Java8及以上的java环境
操作系统:centos7
2.1.安装zookeeper
下载地址:Apache ZooKeeper
如果需要下载比较老的版本可以通过连接Apache Archive Distribution Directory

解压下载的压缩包
tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz
启动zookeeper:
#进入解压后的zookeeper目录
cd apache-zookeeper-3.5.5-bin
#启动
bin/zkServer.sh start
#查看zookeeper是否成功启动
ps -ef|grep zookeeper
2.2.安装kafka
下载地址:[Apache Kafka](https://kafka.apache.org/downloads)

解压下载的压缩包:
tar -zxvf kafka_2.11-2.4.0.tgz
配置kafka连接的zookeeper地址:
cd kafka_2.11-2.4.0/config
#zookeeper.connect=localhost:2181 将这里修改为实际zookeeper的地址和端口
vim server.properties
启动kafka:
cd kafka_2.11-2.4.0/bin
./kafka-server-start.sh -daemon /home/packages/kafka_2.11-2.4.0/config/server.properties
ps -ef|grep kafka #验证是否启动