为什么使用 Kafka 消息中间件

  • 缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
  • 解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
  • 异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。

Kafka 集群环境安装部署

解压安装包

Kafka 的版本,从Kafka 的安装包中就可以看出对应的版本号。

  • kafka_2.11-2.4.0.tgz 中包含2个版本号。其中前面第一个版本是 Scala 的版本,第二个版本才是 Kafka 真正的版本。

本次集群环境搭建使用的版本是 2.4.0 的版本

本次使用 10.0.24.12、10.0.24.13、10.0.24.14 三台计算机搭建 Kafka 的集群环境

# 10.0.24.12 节点中进行解压
tar -zxvf kafka_2.11-2.4.0.tgz -C /usr/local/

# 10.0.24.13 节点中进行解压
tar -zxvf kafka_2.11-2.4.0.tgz -C /usr/local/

# 10.0.24.14 节点中进行解压
tar -zxvf kafka_2.11-2.4.0.tgz -C /usr/local/


解压完成之后查看
# 10.0.24.12 节点
drwxr-xr-x   8 root root 4096 Mar  8 14:53 kafka

# 10.0.24.12 节点
drwxr-xr-x   8 root root 4096 Mar  8 14:53 kafka

# 10.0.24.13 节点
drwxr-xr-x   8 root root 4096 Mar  8 14:53 kafka

修改配置文件

Kafka 解压完成之后,需要我们进行配置文件的修改。
Kafka 主要使用的配置文件是 server.properties 配置文件,我们只需要对其中的内容进行修改即可。

配置文件中有三个内容是最基础的配置

  • 配置 10.0.24.12 这台服务器节点的 ***server.properties ***配置文件
### 配置 broker id
broker.id=0

### 配置 kafka 文件存储位置 (注意:不要使用默认的 /tmp 临时目录) 
log.dirs=/usr/local/kafka/data


### 配置 listeners 监听。(其实就是监听的 ip + 端口号)
listeners=PLAINTEXT://10.0.24.12:9092


# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured.  Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
### 这里这个参数可以不进行设置,
### 但是,当前我这台服务器使用的一台云服务器,如果我们想通过公网访问kafka 的9092 端口,这里就需要将公网地址写上。
advertised.listeners=PLAINTEXT://111.44.151.117:9092


### 配置 zookeeper 的地址。kafka 需要使用zk, 因此我们需要指定zk 的地址。(可以使用 集群,也可以使用单机版本的 zk)
zookeeper.connect=10.0.24.09:2181,10.0.24.10:2181,10.0.24.11:2181/kafka

依次登录 10.0.24.13、10.0.24.14 剩余2台服务器的配置。

对剩余2台服务器的配置文件的配置,基本就是重复上面的步骤,但是 注意 broker.id 的值需要进行修改。

所谓的这个 broker.id 其实就是集群环境中节点的唯一标识。

比如

broker.id=1

broker.id=2

至此,三台机器的配置文件依次修改完毕,Kafka 的集群模式就已经搭建完毕了 !!!

Kafka 目录结构介绍

  • bin 目录中主要是可执行的脚本
  • conf 目录中主要是一些配置文件
drwxr-xr-x  3 root root  4096 Apr 14 10:43 bin
drwxr-xr-x  2 root root  4096 Apr 18 16:22 config
drwxr-xr-x  2 root root  4096 Mar  8 11:50 libs
-rw-r--r--  1 root root 32216 Dec 10  2019 LICENSE
drwxr-xr-x  2 root root 94208 Apr 18 16:00 logs
-rw-r--r--  1 root root   337 Dec 10  2019 NOTICE
drwxr-xr-x  2 root root  4096 Dec 10  2019 site-docs

### bin 目录中可执行的脚本

-rwxr-xr-x 1 root root 1421 Dec 10  2019 connect-distributed.sh
-rwxr-xr-x 1 root root 1394 Dec 10  2019 connect-mirror-maker.sh
-rwxr-xr-x 1 root root 1418 Dec 10  2019 connect-standalone.sh
-rwxr-xr-x 1 root root  861 Dec 10  2019 kafka-acls.sh
-rwxr-xr-x 1 root root  873 Dec 10  2019 kafka-broker-api-versions.sh
-rwxr-xr-x 1 root root  864 Dec 10  2019 kafka-configs.sh
-rwxr-xr-x 1 root root  945 Dec 10  2019 kafka-console-consumer.sh
-rwxr-xr-x 1 root root  944 Dec 10  2019 kafka-console-producer.sh
-rwxr-xr-x 1 root root  871 Dec 10  2019 kafka-consumer-groups.sh
-rwxr-xr-x 1 root root  948 Dec 10  2019 kafka-consumer-perf-test.sh
-rwxr-xr-x 1 root root  871 Dec 10  2019 kafka-delegation-tokens.sh
-rwxr-xr-x 1 root root  869 Dec 10  2019 kafka-delete-records.sh
-rwxr-xr-x 1 root root  866 Dec 10  2019 kafka-dump-log.sh
-rwxr-xr-x 1 root root  870 Dec 10  2019 kafka-leader-election.sh
-rwxr-xr-x 1 root root  863 Dec 10  2019 kafka-log-dirs.sh
-rwxr-xr-x 1 root root  862 Dec 10  2019 kafka-mirror-maker.sh
-rwxr-xr-x 1 root root  886 Dec 10  2019 kafka-preferred-replica-election.sh
-rwxr-xr-x 1 root root  959 Dec 10  2019 kafka-producer-perf-test.sh
-rwxr-xr-x 1 root root  874 Dec 10  2019 kafka-reassign-partitions.sh
-rwxr-xr-x 1 root root  874 Dec 10  2019 kafka-replica-verification.sh
-rwxr-xr-x 1 root root 9633 Dec 10  2019 kafka-run-class.sh
-rwxr-xr-x 1 root root 1424 Apr 14 10:43 kafka-server-start.sh
-rwxr-xr-x 1 root root  997 Dec 10  2019 kafka-server-stop.sh
-rwxr-xr-x 1 root root  945 Dec 10  2019 kafka-streams-application-reset.sh
-rwxr-xr-x 1 root root  863 Dec 10  2019 kafka-topics.sh
-rwxr-xr-x 1 root root  958 Dec 10  2019 kafka-verifiable-consumer.sh
-rwxr-xr-x 1 root root  958 Dec 10  2019 kafka-verifiable-producer.sh
-rwxr-xr-x 1 root root 1722 Dec 10  2019 trogdor.sh
drwxr-xr-x 2 root root 4096 Dec 10  2019 windows
-rwxr-xr-x 1 root root  867 Dec 10  2019 zookeeper-security-migration.sh
-rwxr-xr-x 1 root root 1393 Dec 10  2019 zookeeper-server-start.sh
-rwxr-xr-x 1 root root 1001 Dec 10  2019 zookeeper-server-stop.sh
-rwxr-xr-x 1 root root  968 Dec 10  2019 zookeeper-shell.sh

### conf 配置文件目录。server.properties 配置文件就是 kafka 集群环境中需要配置使用的配置文件。

-rw-r--r-- 1 root root  906 Dec 10  2019 connect-console-sink.properties
-rw-r--r-- 1 root root  909 Dec 10  2019 connect-console-source.properties
-rw-r--r-- 1 root root 5321 Dec 10  2019 connect-distributed.properties
-rw-r--r-- 1 root root  883 Dec 10  2019 connect-file-sink.properties
-rw-r--r-- 1 root root  881 Dec 10  2019 connect-file-source.properties
-rw-r--r-- 1 root root 2247 Dec 10  2019 connect-log4j.properties
-rw-r--r-- 1 root root 1539 Dec 10  2019 connect-mirror-maker.properties
-rw-r--r-- 1 root root 2262 Dec 10  2019 connect-standalone.properties
-rw-r--r-- 1 root root 1221 Dec 10  2019 consumer.properties
-rw-r--r-- 1 root root 4675 Dec 10  2019 log4j.properties
-rw-r--r-- 1 root root 1925 Dec 10  2019 producer.properties
-rw-r--r-- 1 root root 6984 Mar  8 23:23 server.properties
-rw-r--r-- 1 root root 1032 Dec 10  2019 tools-log4j.properties
-rw-r--r-- 1 root root 1169 Dec 10  2019 trogdor.conf
-rw-r--r-- 1 root root 1441 Dec 10  2019 zookeeper.properties

Kafka 启动停止

Kafka 的启动

Kafka 集群环境的启动,只需要依次启动三台服务器节点即可。

./kafka-server-start.sh -daemon ../config/server.properties

  • -daemon 表示以后台的方式启动
  • ../config/server.properties 指定server.properties 文件的位置
### 启动 10.0.24.12 节点
 ./kafka-server-start.sh -daemon ../config/server.properties


### 启动 10.0.24.13 节点
 ./kafka-server-start.sh -daemon ../config/server.properties


### 启动 10.0.24.14 节点
 ./kafka-server-start.sh -daemon ../config/server.properties

在三台机器中依次执行启动命令。三个 Kafka 集群节点就启动成功

查看 Kafka 是否启动成功。

查看 Kafka 是否启动成功,我们可以查看zookeeper中节点对应的内容。

下面的执行结果可以看出,Zookeeper 中已经有了 Kafka 中的节点。

其中 [ 0, 1, 2] 其实就是我们在配置文件中配置的 broker.id 的值。

[zk: localhost:2181(CONNECTED) 4] ls /kafka/brokers/ids
[0, 1, 2]

Kafka 的停止

Kafka 的停止,依次在三台节点中执行 stop 脚本即可。

### 结束 10.0.24.12 节点
./kafka-server-stop.sh

### 结束 10.0.24.13 节点
./kafka-server-stop.sh

### 结束 10.0.24.14 节点
./kafka-server-stop.sh

命令行操作 topic

Topic 主题。是一个逻辑上的概念,目的是为了对消息进行分类。

不同种类的消息使用不同的 Topic 。 这样便于业务的逻辑区分。也更加的清晰,明了。

创建 topic 主题

### 创建 yanxu-test 主题topic。 三个分区,3个副本。
bin/kafka-topics.sh --create --zookeeper 10.0.24.12:2181/kafka --replication-factor 3 --partitions 3 --topic yanxu-test

查看已经创建的主题

### 查看已经创建的主题
[root@10 bin]# ./kafka-topics.sh --list --zookeeper 10.0.24.12:2181/kafka

__consumer_offsets
__transaction_state
my-replicated-topic
my-topic-001
yanxu-data-topic
yanxu-study01
yanxu-study02
yanxu-topi
yyaann	

查看某个具体的 topic 主题信息

### 查看某个主题的具体的信息 --describe 
### 从中,我们可以看出分区、副本,leader , isr 等信息。
[root@10 bin]# ./kafka-topics.sh --bootstrap-server 10.0.24.12:9092 --describe --topic yyaann

Topic: yyaann   PartitionCount: 3       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: yyaann   Partition: 0    Leader: 2       Replicas: 2,0,1 Isr: 2,0,1
        Topic: yyaann   Partition: 1    Leader: 0       Replicas: 0,1,2 Isr: 0,1,2
        Topic: yyaann   Partition: 2    Leader: 1       Replicas: 1,2,0 Isr: 1,2,0

删除某个topic 主题

### 删除 yyaann 主题
[root@10 bin]# ./kafka-topics.sh --bootstrap-server 10.0.24.12:9092 --delete --topic yyaann


#########################################################

### 再次进行查询所有的 topic 主题
[root@10 bin]# ./kafka-topics.sh --list --zookeeper 10.0.24.12:2181/kafka

__consumer_offsets
__transaction_state
my-replicated-topic
my-topic-001
yanxu-data-topic
yanxu-study01
yanxu-study02
yanxu-topi
yyaann - marked for deletion	


#########################################################
#### 此时,可以发现 yyaann 主题已经被标记为 deletion 状态了。

命令行 生产数据、消费数据

生产数据

### 进行生产端生产数据
[root@10 bin]# ./kafka-console-producer.sh --broker-list 10.0.24.12:9092 --topic yanxu-study01
>a
>b
>c
>d

消费数据

Kafka 在进行消费的时候,默认是消费最新的消息。

但是,我们也可以指定参数 --from-beginning 表示从开始的位置开始进行消费。

方式一:从最后一条消息的偏移量+1开始消费

[root@10 bin]# ./kafka-console-consumer.sh --bootstrap-server 10.0.24.12:9092 --topic yanxu-study01
>a
>b
>c
>d

方式二:从头开始消费 ***--from-beginning *** 参数进行处理

[root@10 bin]# ./kafka-console-consumer.sh --bootstrap-server 10.0.24.12:9092 --topic yanxu-study01 --from-beginning
>1
>2
>3
>b
>c
>d
posted on 2023-04-20 16:41  油腻……  阅读(223)  评论(0)    收藏  举报