kafka学习笔记四:搭建Kafka集群

Kafka集群配置通常有三种,最简单的下面的第一种,也是默认的一种:

  1. 单节点,单Broker
  2. 单节点,多Broker
  3. 多节点,多Broker


版本选择:

kafka_2.11-0.11.0.0.tar.gz

zookeeper-3.4.10.tar.gz

可以到kafka官网和zookeeper官网上下载到安装包

1、单节点,单Broker配置

1、安装kafka

单节点,单Broker配置是最基本的用法,可以使用Kafka自带的zookeeper

kafka_2.11-0.11.0.0.tar.gz安装包上传到/opt/package,解压得到/opt/kafka_2.11-0.11.0.0

为了方便目录的管理,把这个目录名称修改一下

mv kafka_2.11-0.11.0.0  kafka_2_11_0_11_0

/opt/kafka_2.11-0.11.0.0
[root@node2 kafka_2_11_0_11_0]# ll
总用量 60
drwxr-xr-x. 3 root root  4096 8月  19 08:20 bin
drwxr-xr-x. 2 root root  4096 8月  19 08:20 config
drwxr-xr-x. 2 root root  4096 8月  19 08:20 libs
-rw-r--r--. 1 root root 28824 8月  19 08:20 LICENSE
drwxr-xr-x. 2 root root  4096 8月  20 09:02 logs
-rw-r--r--. 1 root root   336 8月  19 08:20 NOTICE
drwxr-xr-x. 2 root root  4096 8月  19 08:19 site-docs
[root@node2 kafka_2.11-0.11.0.0]# 

我们需要在这个目录下创建kafka和自带的zookeeper产生的数据文件的目录

[root@node2 kafka_2_11_0_11_0]# mkdir data
[root@node2 kafka_2_11_0_11_0]# mkdir data/kafka
[root@node2 kafka_2_11_0_11_0]# mkdir data/zk
完整的路径是这样:
/opt/kafka_2_11_0_11_0/data/kafka
/opt/kafka_2_11_0_11_0/data/zk

2、配置kafka和zookeeper

首先进入kafka的config文件目录

[root@node2 config]# ll
总用量 64
-rw-r--r--. 1 root root  906 8月  19 08:20 connect-console-sink.properties
-rw-r--r--. 1 root root  909 8月  19 08:20 connect-console-source.properties
-rw-r--r--. 1 root root 5807 8月  19 08:20 connect-distributed.properties
-rw-r--r--. 1 root root  883 8月  19 08:20 connect-file-sink.properties
-rw-r--r--. 1 root root  881 8月  19 08:20 connect-file-source.properties
-rw-r--r--. 1 root root 1111 8月  19 08:20 connect-log4j.properties
-rw-r--r--. 1 root root 2730 8月  19 08:20 connect-standalone.properties
-rw-r--r--. 1 root root 1199 8月  19 08:20 consumer.properties
-rw-r--r--. 1 root root 4696 8月  19 08:20 log4j.properties
-rw-r--r--. 1 root root 1900 8月  19 08:20 producer.properties
-rw-r--r--. 1 root root 7135 8月  19 08:20 server.properties
-rw-r--r--. 1 root root 1032 8月  19 08:20 tools-log4j.properties
-rw-r--r--. 1 root root 1023 8月  19 08:20 zookeeper.properties
有两个重要的文件需要配置:

分别是server.properties、zookeeper.properties

vi zookeeper.properties

#zookeeper产生的数据文件保存的路径
dataDir=/opt/kafka_2_11_0_11_0/data/zk
其他参数保持不变,然后保存退出

vi server.properties

#允许立刻删除TOPIC
delete.topic.enable=true

#kafka产生的数据文件存放目录
log.dirs=/opt/kafka_2_11_0_11_0/kafkalogs

#当前主机名
host.name=192.168.120.12

zookeeper.connect=192.168.120.12:2181
listeners=PLAINTEXT://192.168.120.12:9092

其他参数保持不变,然后保存退出

这里的zookeeper.connect参数最好用本机IP地址,而不是用localhost, listeners参数后面的也需要添加本机IP,

这里为何要修改zk和kafka的保存数据文件的默认路径呢,因为默认的路径是/tmp开头的路径,这个路径在服务启动启动后就被清空了,它是个临时目录。

3、启动zookeeper

nohup /opt/kafka_2_11_0_11_0/bin/zookeeper-server-start.sh /opt/kafka_2_11_0_11_0/config/zookeeper.properties > /opt/kafka_2_11_0_11_0/logs/kafka-zk.log 2>&1 &

这个启动命令里面指定了启动的zookeeper-server-start.sh和对应的配置文件,以及产生的日志文件的路径

为了方便以后使用,可以把这个放在一个启动脚本里面,比如start_zk.sh

[root@node2 bin]# ./start_zk.sh 
[root@node2 bin]# jps
13645 QuorumPeerMain
13887 Jps
[root@node2 bin]# ll  /opt/kafka_2_11_0_11_0/logs/
总用量 24
-rw-r--r--. 1 root root  162 11月  9 12:43 controller.log
-rw-r--r--. 1 root root    0 11月  9 12:43 kafka-authorizer.log
-rw-r--r--. 1 root root    0 11月  9 12:43 kafka-request.log
-rw-r--r--. 1 root root 7320 11月  9 12:43 kafka-zk.log
-rw-r--r--. 1 root root    0 11月  9 12:43 log-cleaner.log
-rw-r--r--. 1 root root 7320 11月  9 12:43 server.log
-rw-r--r--. 1 root root  168 11月  9 12:43 state-change.log
-rw-r--r--. 1 root root    0 11月  9 12:43 zookeeper-gc.log.0.current
[root@node2 bin]# 

执行start_zk.sh后使用jps查看java进程可以看到zookeeper的QuorumPeerMain进程已经存在

查看/opt/kafka_2_11_0_11_0/logs/目录已经产生了相关的日志文件

4、启动kafka

启动命令:

nohup /opt/kafka_2_11_0_11_0/bin/kafka-server-start.sh /opt/kafka_2_11_0_11_0/config/server.properties > /opt/kafka_2_11_0_11_0/logs/kafka-serve.log 2>&1 &
同理我们可以把这个启动命令用shell脚本方式来保存和执行,创建一个start_kafka.sh 写入上面的指令然后保存退出

执行start_kafka.sh后使用jps查看java进程可以看到kafka进程已经存在

查看/opt/kafka_2_11_0_11_0/logs/目录已经产生了相关的日志文件

-rwxr--r--. 1 root root  157 11月  9 12:49 start_kafka.sh
-rwxr--r--. 1 root root  160 11月  9 12:39 start_zk.sh
-rwxr-xr-x. 1 root root  867 8月  19 08:20 zookeeper-security-migration.sh
-rwxr-xr-x. 1 root root 1393 8月  19 08:20 zookeeper-server-start.sh
-rwxr-xr-x. 1 root root  978 8月  19 08:20 zookeeper-server-stop.sh
-rwxr-xr-x. 1 root root  968 8月  19 08:20 zookeeper-shell.sh
[root@node2 bin]# jps
13915 Jps
13645 QuorumPeerMain
[root@node2 bin]# ./start_kafka.sh 
[root@node2 bin]# jps
13926 Kafka
14168 Jps
13645 QuorumPeerMain
[root@node2 bin]# ll /opt/kafka_2_11_0_11_0/logs/
总用量 84
-rw-r--r--. 1 root root  4244 11月  9 12:49 controller.log
-rw-r--r--. 1 root root     0 11月  9 12:43 kafka-authorizer.log
-rw-r--r--. 1 root root     0 11月  9 12:43 kafka-request.log
-rw-r--r--. 1 root root 17064 11月  9 12:49 kafka-serve.log
-rw-r--r--. 1 root root  4420 11月  9 12:49 kafkaServer-gc.log.0.current
-rw-r--r--. 1 root root 10158 11月  9 12:49 kafka-zk.log
-rw-r--r--. 1 root root   172 11月  9 12:49 log-cleaner.log
-rw-r--r--. 1 root root 27222 11月  9 12:49 server.log
-rw-r--r--. 1 root root   344 11月  9 12:49 state-change.log
-rw-r--r--. 1 root root     0 11月  9 12:43 zookeeper-gc.log.0.current
[root@node2 bin]# 

5、topic操作

进入到kafka的bin目录

[root@node2 bin]# ll
总用量 128
-rwxr-xr-x. 1 root root 1335 8月  19 08:20 connect-distributed.sh
-rwxr-xr-x. 1 root root 1332 8月  19 08:20 connect-standalone.sh
-rwxr-xr-x. 1 root root  861 8月  19 08:20 kafka-acls.sh
-rwxr-xr-x. 1 root root  873 8月  19 08:20 kafka-broker-api-versions.sh
-rwxr-xr-x. 1 root root  864 8月  19 08:20 kafka-configs.sh
-rwxr-xr-x. 1 root root  945 8月  19 08:20 kafka-console-consumer.sh 
-rwxr-xr-x. 1 root root  944 8月  19 08:20 kafka-console-producer.sh 
-rwxr-xr-x. 1 root root  871 8月  19 08:20 kafka-consumer-groups.sh   
-rwxr-xr-x. 1 root root  872 8月  19 08:20 kafka-consumer-offset-checker.sh
-rwxr-xr-x. 1 root root  948 8月  19 08:20 kafka-consumer-perf-test.sh
-rwxr-xr-x. 1 root root  869 8月  19 08:20 kafka-delete-records.sh
-rwxr-xr-x. 1 root root  862 8月  19 08:20 kafka-mirror-maker.sh
-rwxr-xr-x. 1 root root  886 8月  19 08:20 kafka-preferred-replica-election.sh
-rwxr-xr-x. 1 root root  959 8月  19 08:20 kafka-producer-perf-test.sh
-rwxr-xr-x. 1 root root  874 8月  19 08:20 kafka-reassign-partitions.sh
-rwxr-xr-x. 1 root root  868 8月  19 08:20 kafka-replay-log-producer.sh
-rwxr-xr-x. 1 root root  874 8月  19 08:20 kafka-replica-verification.sh
-rwxr-xr-x. 1 root root 7027 8月  19 08:20 kafka-run-class.sh
-rwxr-xr-x. 1 root root 1376 8月  19 08:20 kafka-server-start.sh
-rwxr-xr-x. 1 root root  975 8月  19 08:20 kafka-server-stop.sh
-rwxr-xr-x. 1 root root  870 8月  19 08:20 kafka-simple-consumer-shell.sh
-rwxr-xr-x. 1 root root  945 8月  19 08:20 kafka-streams-application-reset.sh
-rwxr-xr-x. 1 root root  863 8月  19 08:20 kafka-topics.sh            
-rwxr-xr-x. 1 root root  958 8月  19 08:20 kafka-verifiable-consumer.sh
-rwxr-xr-x. 1 root root  958 8月  19 08:20 kafka-verifiable-producer.sh
-rwxr--r--. 1 root root  157 11月  9 12:49 start_kafka.sh
-rwxr--r--. 1 root root  160 11月  9 12:39 start_zk.sh
-rwxr-xr-x. 1 root root  867 8月  19 08:20 zookeeper-security-migration.sh
-rwxr-xr-x. 1 root root 1393 8月  19 08:20 zookeeper-server-start.sh
-rwxr-xr-x. 1 root root  978 8月  19 08:20 zookeeper-server-stop.sh
-rwxr-xr-x. 1 root root  968 8月  19 08:20 zookeeper-shell.sh
[root@node2 bin]# 
可以看到有很多的.sh可执行文件,这里我们先来关注kafka-topics.sh这个脚本,执行./kafka-topics.sh可以获得这个脚本的帮助信息以及详细的参数

[root@node2 bin]# ./kafka-topics.sh 
Create, delete, describe, or change a topic.

Option                                   Description                            
------                                   -----------                            
--alter                                  Alter the number of partitions,        
                                           replica assignment, and/or           
                                           configuration for the topic.         
--config             A topic configuration override for the 
                                           topic being created or altered.The   
                                           following is a list of valid         
                                           configurations:                      
                                         	cleanup.policy                        
                                         	compression.type                      
                                         	delete.retention.ms                   
                                         	file.delete.delay.ms                  
                                         	flush.messages                        
                                         	flush.ms                              
                                         	follower.replication.throttled.       
                                           replicas                             
                                         	index.interval.bytes                  
                                         	leader.replication.throttled.replicas 
                                         	max.message.bytes                     
                                         	message.format.version                
                                         	message.timestamp.difference.max.ms   
                                         	message.timestamp.type                
                                         	min.cleanable.dirty.ratio             
                                         	min.compaction.lag.ms                 
                                         	min.insync.replicas                   
                                         	preallocate                           
                                         	retention.bytes                       
                                         	retention.ms                          
                                         	segment.bytes                         
                                         	segment.index.bytes                   
                                         	segment.jitter.ms                     
                                         	segment.ms                            
                                         	unclean.leader.election.enable        
                                         See the Kafka documentation for full   
                                           details on the topic configs.        
--create                                 Create a new topic.                    
--delete                                 Delete a topic                         
--delete-config            A topic configuration override to be   
                                           removed for an existing topic (see   
                                           the list of configurations under the 
                                           --config option).                    
--describe                               List details for the given topics.     
--disable-rack-aware                     Disable rack aware replica assignment  
--force                                  Suppress console prompts               
--help                                   Print usage information.               
--if-exists                              if set when altering or deleting       
                                           topics, the action will only execute 
                                           if the topic exists                  
--if-not-exists                          if set when creating topics, the       
                                           action will only execute if the      
                                           topic does not already exist         
--list                                   List all available topics.             
--partitions   The number of partitions for the topic 
                                           being created or altered (WARNING:   
                                           If partitions are increased for a    
                                           topic that has a key, the partition  
                                           logic or ordering of the messages    
                                           will be affected                     
--replica-assignment                                            
--replication-factor                       partition in the topic being created.
--topic                   The topic to be create, alter or       
                                           describe. Can also accept a regular  
                                           expression except for --create option
--topics-with-overrides                  if set when describing topics, only    
                                           show topics that have overridden     
                                           configs                              
--unavailable-partitions                 if set when describing topics, only    
                                           show partitions whose leader is not  
                                           available                            
--under-replicated-partitions            if set when describing topics, only    
                                           show under replicated partitions     
--zookeeper                REQUIRED: The connection string for    
                                           the zookeeper connection in the form 
                                           host:port. Multiple URLS can be      
                                           given to allow fail-over.         

1)创建topic

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic   user_data

创建一个名为user_data的Topic, 复制因子she为1,并且为这个Topic创建两个分区

[root@node2 bin]# ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic   user_data
WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
Created topic "user_data".
因为是单节点的单Broker,因此复制因子设置成1

2)查看指定的Topic

查看刚创建好的user_data这个Topic

[root@node2 bin]# ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic   user_data
Topic:user_data	PartitionCount:2	ReplicationFactor:1	Configs:
	Topic: user_data	Partition: 0	Leader: 0	Replicas: 0	Isr: 0
	Topic: user_data	Partition: 1	Leader: 0	Replicas: 0	Isr: 0
[root@node2 bin]# 


看看/opt/kafka_2_11_0_11_0/data/kafka这个目录的情况,kafka会在这个目录下创建分区的相关信息,例如分区的名称组成的目录

[root@node2 bin]# ll /opt/kafka_2_11_0_11_0/data/kafka
总用量 24
-rw-r--r--. 1 root root    0 11月  9 14:29 cleaner-offset-checkpoint
-rw-r--r--. 1 root root    4 11月  9 14:32 log-start-offset-checkpoint
-rw-r--r--. 1 root root   54 11月  9 14:29 meta.properties
-rw-r--r--. 1 root root   32 11月  9 14:32 recovery-point-offset-checkpoint
-rw-r--r--. 1 root root   32 11月  9 14:32 replication-offset-checkpoint
drwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-0
drwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-1
[root@node2 bin]# 
指定user_data这个topic有2个分区,因此在这个目录下创建了两个分区对应的目录user_data-0、user_data-1

3)扩展指定Topic的分区

把user_data这个topic的分区扩展到3个分区,执行下面这个命令:

./kafka-topics.sh --alter --zookeeper localhost:2181 --partitions 3 --topic user_data

[root@node2 bin]# ./kafka-topics.sh --alter --zookeeper localhost:2181 --partitions 3 --topic user_data
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded!
[root@node2 bin]# ll /opt/kafka_2_11_0_11_0/data/kafka
总用量 28
-rw-r--r--. 1 root root    0 11月  9 14:29 cleaner-offset-checkpoint
-rw-r--r--. 1 root root    4 11月  9 14:37 log-start-offset-checkpoint
-rw-r--r--. 1 root root   54 11月  9 14:29 meta.properties
-rw-r--r--. 1 root root   32 11月  9 14:37 recovery-point-offset-checkpoint
-rw-r--r--. 1 root root   46 11月  9 14:37 replication-offset-checkpoint
drwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-0
drwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-1
drwxr-xr-x. 2 root root 4096 11月  9 14:37 user_data-2
[root@node2 bin]# 

可以看到/opt/kafka_2_11_0_11_0/data/kafka目录下的分区目录里增加了user_data-2,分区的数量只能从从小到大扩展,还无法从大到小收缩

4)删除指定的Topic

执行./kafka-topics.sh --delete --zookeeper localhost:2181  --topic user_data 可以删除指定的user_data这个Topic

[root@node2 bin]# ./kafka-topics.sh --delete --zookeeper localhost:2181  --topic user_data
Topic user_data is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
[root@node2 bin]# ll /opt/kafka_2_11_0_11_0/data/kafka
总用量 32
-rw-r--r--. 1 root root    4 11月  9 14:40 cleaner-offset-checkpoint
-rw-r--r--. 1 root root    4 11月  9 14:40 log-start-offset-checkpoint
-rw-r--r--. 1 root root   54 11月  9 14:29 meta.properties
-rw-r--r--. 1 root root   46 11月  9 14:40 recovery-point-offset-checkpoint
-rw-r--r--. 1 root root   46 11月  9 14:40 replication-offset-checkpoint
drwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-0.01c12e5c5a1a490aaa5f3254c55d5e7f-delete
drwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-1.57224767ec3b4877be7d8aef941feaa2-delete
drwxr-xr-x. 2 root root 4096 11月  9 14:37 user_data-2.850f30ff5ea944e98a69ee72beab9f51-delete
当再次查看/opt/kafka_2_11_0_11_0/data/kafka这个目录时发现user_data这个Topic的所有分区的目录名称都已经被标注了delete,过几分钟再次查看时发现这3个目录都已经被完全清理

6、收发消息操作

1)创建Consumer

执行./kafka-console-consumer.sh --bootstrap-server 192.168.120.12:9092 --from-beginning --topic user_data

创建一个从user_data这个Topic消费消息的消费者进程

[root@node2 bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.120.12:9092 --from-beginning --topic user_data

2)创建Producder

创建一个把数据发送到user_data的Producer,根据经验一定要指定本机IP,而不是用localhost,打开一个console

./kafka-console-producer.sh -broker-list 192.168.120.12:9092 --topic user_data
执行了这个命令之后,命令行会出现一个>提示符,在提示符后面输入内容按回车就可以发送到user_data这个Topic里面,

[root@node2 bin]# ./kafka-console-producer.sh -broker-list 192.168.120.12:9092 --topic user_data
>hello kafka 
>aaaaa
>bbbbb
>ccccc
>ddddd
>eeeee
>fffff
>ggggg
>hhhhh
>

看另一个consule里的情况

[root@node2 bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.120.12:9092 --from-beginning --topic user_data
hello kafka
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
可以看到已经收到producer端发送的消息。

OK 我们已经部署好了单机的单Broker,接收和发送消息都是OK的,后面还会继续推出kafka的相关分享。



你可能感兴趣的:(Kafka)