一、Kafka 安装与使用
1、安装jdk
官方建议使用JDK 1.8版本,因此本文使用的环境都是JDK1.8。关于JDK的安装,本文不再详述,默认Java环境已经具备。
2、安装scala
1) 下载地址
https://www.scala-lang.org/download/2.12.12.html
2) 移动到指定目录
mv Downloads/scala-2.12.12.tgz ./Software/
3)解压
tar -xzvf scala-2.12.12.tgz
4)配置scala环境变量
当前用户如果没有.bash_profile,则创建,对应命令如下:
touch ~/.bash_profile
vim ~/.bash_profile
配置如下内容
SCALA_HOME=/Users/kitty/Software/scala-2.12.12
export PATH=$PATH:$SCALA_HOME/bin
5)校验scala安装是否成功
MacBook-Pro:~ kitty$ scala
Welcome to Scala 2.12.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_271).
Type in expressions for evaluation. Or try :help.
3、安装zookeeper
由于Kafka依赖Zookeeper,kafka通过Zookeeper现实分布式系统的协调,用来保存集群的元数据信息,所以我们需要先安装Zookeeper
1)、下载地址
https://zookeeper.apache.org/releases.html#download
2)、复制到指定目录解压
mv Downloads/apache-zookeeper-3.6.2-bin.tar.gz Software/
tar -xzvf apache-zookeeper-3.6.2-bin.tar.gz
3)、修改配置文件
在zookeeper解压后的目录下找到conf文件夹,进入后
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/Users/kitty/Software/zookeeper-3.6.2/data/zookeeper
4)、启动zookeeper。
进入zookeeper根目录执行
MacBook-Pro:zookeeper-3.6.2 kitty$ bin/zkServer.sh start
得到如下响应:
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /Users/kitty/Software/zookeeper-3.6.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
4、安装kafka
1)下载地址
https://www.apache.org/dyn/closer.cgi?path=/kafka/2.4.0/kafka_2.12-2.4.0.tgz
解压
tar -xzvf kafka_2.12-2.4.0.tgz
2)修改kafka的配置文件
进入kafka根目录下的config文件夹下,打开server.properties,修改如下配置项
log.dirs=a-logs
3)启动kafka
进入kafka根目录执行
MacBook-Pro:kafka_2.12-2.4.0 kitty$ bin/kafka-server-start.sh -daemon config/server.properties
此命令告诉kaka启动时使用config/server.properties配置项 -daemon 后台进程启动
通过如下命令查看kafka进程是否启动
MacBook-Pro:kafka_2.12-2.4.0 kitty$ jps
3076 Kafka
3077 Jps
2075 QuorumPeerMain
MacBook-Pro:logs kitty$ pwd
/Users/kitty/Software/kafka_2.12-2.4.0/logs
MacBook-Pro:logs kitty$ ls
controller.log kafka-request.log log-cleaner.log kafka-authorizer.log kafkaServer-gc.log.0.current server.log kafka-logs kafkaServer.out state-change.log
启动kafka后,查看server.log日志
MacBook-Pro:logs kitty$ cat server.log
................
................
[2020-11-15 15:11:40,365] INFO Kafka commitId: 77a89fcf8d7fa018 (org.apache.kafka.common.utils.AppInfoParser)
[2020-11-15 15:11:40,366] INFO Kafka startTimeMs: 1605424300362 (org.apache.kafka.common.utils.AppInfoParser)
[2020-11-15 15:11:40,367] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
4)zookeeper观察kafka启动信息
进入zookeeper根目录下,执行
MacBook-Pro:zookeeper-3.6.2 kitty$ bin/zkCli.sh -server 127.0.0.1:2181
启动成功后如下图
Connecting to 127.0.0.1:2181
................
................
................
Welcome to ZooKeeper!
................
................
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0]
输入命令 ls /brokers,回车,可以看到子节点信息
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /brokers
[ids, seqid, topics]
这些子节点存储的就是kafka集群管理的数据。brokers是kafka的一个服务单元实例
输入命令 ls /brokers/ids,可以看到如下信息:
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /brokers/ids
[0]
kafka配置项broker.id=0 , 这里的0就是表示那个kafka的实例注册进了zookeeper
二、kafka命令行发送消息
1、创建topic
Kafka提供了一个名为 kafka-topics.sh 的命令行实用程序,用于在服务器上创建主题。 打开新终端并键入以下示例。
进入kafka根目录,执行如下命令:
MacBook-Pro:kafka_2.12-2.4.0 kitty$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic Hello-Kafka
Created topic Hello-Kafka.
我们刚刚创建了一个名为 Hello-Kafka 的主题,其中包含一个分区和一个副本因子。 上面创建完成后,我们可以在kafka的日志文件中看到我们创建的主题文件 -
MacBook-Pro:kafka_2.12-2.4.0 kitty$ ls logs/kafka-logs/
Hello-Kafka-0 log-start-offset-checkpoint recovery-point-offset-checkpoint cleaner-offset-checkpoint meta.properties replication-offset-checkpoint
2、主题列表
要获取Kafka服务器中的主题列表,可以使用以下命令 -
MacBook-Pro:kafka_2.12-2.4.0 kitty$ bin/kafka-topics.sh --list --zookeeper localhost:2181 Hello-Kafka
3、启动生产者以发送消息
MacBook-Pro:kafka_2.12-2.4.0 kitty$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic Hello-Kafka
从上面的语法,生产者命令行客户端需要两个主要参数 -
代理列表 - 我们要发送邮件的代理列表。 在这种情况下,我们只有一个代理。 Config / server.properties文件包含代理端口ID,因为我们知道我们的代理正在侦听端口9092,因此我们可以直接指定它。
主题名称 - 以下是主题名称的示例。
生产者将等待来自stdin的输入并发布到Kafka集群。 默认情况下,每个新行都作为新消息发布,然后在 config / producer.properties 文件中指定默认生产者属性。 现在,我们可以在终端中键入几行消息,如下所示。
>this is my first message!
4、启动消费者以接收消息
与生产者类似,在 config / consumer.proper-ties 文件中指定了缺省使用者属性。 打开一个新终端并键入以下消息消息语法。
MacBook-Pro:kafka_2.12-2.4.0 kitty$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic Hello-Kafka
this is my first message
可以看到我们收到了消息
至此我们走完了一个发送消息的流程,可以看到我们经历了创建topic、启动生产者、消费者、生产者生产消息、消费者消费消息这几个步骤。
5、zookeeper中的信息
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /brokers
[ids, seqid, topics]
[zk: 127.0.0.1:2181(CONNECTED) 3] ls /brokers/topics
[Hello-Kafka, __consumer_offsets]
[zk: 127.0.0.1:2181(CONNECTED) 4] ls /brokers/topics/Hello-Kafka
[partitions]
[zk: 127.0.0.1:2181(CONNECTED) 5] ls /brokers/topics/Hello-Kafka/partitions
[0]
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /brokers/topics/Hello-Kafka/partitions/0
[state]
[zk: 127.0.0.1:2181(CONNECTED) 8] ls /brokers/topics/Hello-Kafka/partitions/0/state
[]