Kafka是用Java和Scala写的,Kafka运行所依赖的Zookeeper的主要语言也是Java,因此需要安装Java才能运行Zookeeper和Kafka。Oracle JDK和OpenJDK均可,为了兼容性考虑,Java的版本大于等于8即可。
安装方法有两种:
第一种:从Oracle官网下载对应你操作系统的压缩包(tar.gz结尾的文件),以linux系统为例,比如下载路径为 ~/Downloads/jdk-8u231-linux-x64.tar.gz,可以解压到任意路径,比如 /usr/local/目录,解压命令为:
$ sudo tar -zxvf ~/Downloads/jdk-8u231-linux-x64.tar.gz -C /usr/local解压后需要设置环境变量,在个人目录的 .bashrc 或者 .zshrc 的结尾添加以下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH然后执行以下命令来更新环境变量:
$ source ~/.bashrc # 或者 source ~/.zshrc在命令行执行以下命令,测试安装成功与否:
$ java -version如果输出类似以下内容,则说明安装成功:
java version "1.8.0_231" Java(TM) SE Runtime Environment (build 1.8.0_231-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.231-b13, mixed mode)第二种:使用操作系统自带的包管理器安装。
Debian/Ubuntu:
$ sudo apt-get install openjdk-8-jre openjdk-8-jdkRedHat/CentOS:
$ sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-develMacOS:
$ brew cask install oracle-jdk安装后验证方法和第一种安装方法相同。
Kafka安装包在Kafka官网的下载页面可以下载,打开以后会看到类似下图:
因为是使用Kafka,不是修改Kafka的源码,所以不选择Source downloads,选择Binary downloads;Binary downloads又区分Scala版本,这个目前不重要,选择推荐的2.12即可,点击下载。压缩包下载到我的本地路径为:~/workspace/Kafka-101/kafka_2.12-2.3.1.tgz,在这个路径执行解压命令,并重命名解压后的文件夹:
$ pwd ~/workspace/Kafka-101 # 解压压缩包 $ tar zxvf kafka_2.12-2.3.1.tgz # 重命名文件夹 $ mv kafka_2.12-2.3.1 kafka # 进入kafka目录并查看目录内容 $ cd kafka && ls LICENSE NOTICE bin config libs site-docskafka目录中的内容,目前只需要关注bin目录和config目录即可,bin中存放的是各种功能的可执行脚本,config中存放的是各种配置文件,不用感觉头大,最终我们会很熟悉这些脚本和配置文件。
为了方便使用脚本,将kafka的bin目录添加到PATH环境变量中,添加方法:用vi或者其它编辑器编辑 ~/.bashrc 或者 ~/.zshrc,在最后添加一行:
export PATH=~/workspace/Kafka-101/kafka/bin:$PATH然后执行 source ~/.bashrc 或 source ~/.zshrc 即可,在命令行输入kafka然后按Tab键,如果会列出以下备选命令则说明环境变量设置成功:
接下来的操作需要同时启动多个终端(命令行、控制台),在两个终端分别执行如下两个命令:
# zookeeper-server-start.sh这个脚本命令接收一个参数:配置文件的路径,这里提供的是绝对路径,相对路径也是可以的 $ zookeeper-server-start.sh ~/workspace/Kafka-101/kafka/config/zookeeper.properties # 有类似如下输出则说明启动成功 [2019-10-31 06:45:31,649] INFO Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory (org.apache.zookeeper.server.ServerCnxnFactory) [2019-10-31 06:45:31,669] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory) # kafka启动命令与zookeeper类似 $ kafka-server-start.sh ~/workspace/Kafka-101/kafka/config/server.properties # 有类似如下输出则说明启动成功 [2019-10-31 06:47:46,520] INFO Kafka version: 2.3.1 (org.apache.kafka.common.utils.AppInfoParser) [2019-10-31 06:47:46,520] INFO Kafka commitId: 18a913733fb71c01 (org.apache.kafka.common.utils.AppInfoParser) [2019-10-31 06:47:46,520] INFO Kafka startTimeMs: 1572475666515 (org.apache.kafka.common.utils.AppInfoParser) [2019-10-31 06:47:46,522] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)Kafka服务已经启动,现在我们可以作为用户去使用它,使用的方式是向Kafka发送数据(在Kafka中的术语叫做生产),然后再把发送的数据读出来(术语叫做消费),在生产数据之前需要先创建一个topic,这也是一个术语,因为会有多个用户同时使用kafka,需要对不同用户的数据进行区分,topic是Kafka中数据的集合,用户向一个topic生产了哪些数据,就可以从这个topic消费到那些数据。每个topic有一个名字作为唯一标识符,同时还有若干属性,比如分区数和副本数,暂时先不理会它们,创建topic的命令为:
$ kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test # 这条命令没有输出就说明创建成功,也可以用下面的命令验证: $ kafka-topics.sh --list --bootstrap-server localhost:9092 testKafka安装包里包含了在命令行生产和消费数据的工具,我们用它们来做验证。
用终端软件(我用的是Mac下的iTerm 2)以左右分割的方式打开两个窗口,按照如下方式,先启动消费者(右边),再启动生产者(左边),因为我配置了插件,所以我只输入了命令的开头就会自动补全:
注意,我启动了两次consumer,第一次没有 --from-beginning 参数,producer每生产一条数据,consumer就会接收到这条数据,第二次有 --from-beginning 参数,启动后立马就会接收到这个topic生产过的所有数据,这反映了Kafka的特性:数据具有持久性,可以重复消费。
总结:在这篇文章中,我们学习了如何安装Java和Kafka,运行Kafka,并且体验了通过命令行来创建topic和生产、消费数据。
PS:如果你和我一样对Hadoop/Spark/Kafka/Zeppelin/Flink等技术感兴趣,可以来【大数据学徒】一起交流讨论,共同学习。
