文章目录

  • 安装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即可。

安装方法有两种:

  1. 第一种:从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)
  1. 第二种:使用操作系统自带的包管理器安装。
    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官网的下载页面可以下载,打开以后会看到类似下图:

java解决kafka 的rebalancing kafka对应java版本_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 ~/.bashrcsource ~/.zshrc 即可,在命令行输入kafka然后按Tab键,如果会列出以下备选命令则说明环境变量设置成功:

java解决kafka 的rebalancing kafka对应java版本_教程_02

运行并使用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)以左右分割的方式打开两个窗口,按照如下方式,先启动消费者(右边),再启动生产者(左边),因为我配置了插件,所以我只输入了命令的开头就会自动补全:

java解决kafka 的rebalancing kafka对应java版本_教程_03

注意,我启动了两次consumer,第一次没有 --from-beginning 参数,producer每生产一条数据,consumer就会接收到这条数据,第二次有 --from-beginning 参数,启动后立马就会接收到这个topic生产过的所有数据,这反映了Kafka的特性:数据具有持久性,可以重复消费。

总结:在这篇文章中,我们学习了如何安装Java和Kafka,运行Kafka,并且体验了通过命令行来创建topic和生产、消费数据