一、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 
[]