文章目录
- 安装Java
- 安装Kafka
- 运行并使用Kafka
- 启动Zookeeper和Kafka
- 创建topic
- 生产和消费
Kafka 101系列文章第2篇:Kafka安装使用。
安装Java
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-jdk
RedHat/CentOS:
$ sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
MacOS:
$ brew cask install oracle-jdk
安装后验证方法和第一种安装方法相同。
安装Kafka
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-docs
kafka目录中的内容,目前只需要关注bin目录和config目录即可,bin中存放的是各种功能的可执行脚本,config中存放的是各种配置文件,不用感觉头大,最终我们会很熟悉这些脚本和配置文件。
为了方便使用脚本,将kafka的bin目录添加到PATH环境变量中,添加方法:用vi或者其它编辑器编辑 ~/.bashrc
或者 ~/.zshrc
,在最后添加一行:
export PATH=~/workspace/Kafka-101/kafka/bin:$PATH
然后执行 source ~/.bashrc
或 source ~/.zshrc
即可,在命令行输入kafka然后按Tab键,如果会列出以下备选命令则说明环境变量设置成功:
运行并使用Kafka
启动Zookeeper和Kafka
接下来的操作需要同时启动多个终端(命令行、控制台),在两个终端分别执行如下两个命令:
# 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)
创建topic
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
test
生产和消费
Kafka安装包里包含了在命令行生产和消费数据的工具,我们用它们来做验证。
用终端软件(我用的是Mac下的iTerm 2)以左右分割的方式打开两个窗口,按照如下方式,先启动消费者(右边),再启动生产者(左边),因为我配置了插件,所以我只输入了命令的开头就会自动补全:
注意,我启动了两次consumer,第一次没有 --from-beginning
参数,producer每生产一条数据,consumer就会接收到这条数据,第二次有 --from-beginning
参数,启动后立马就会接收到这个topic生产过的所有数据,这反映了Kafka的特性:数据具有持久性,可以重复消费。
总结:在这篇文章中,我们学习了如何安装Java和Kafka,运行Kafka,并且体验了通过命令行来创建topic和生产、消费数据。