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

来源:互联网 发布:学c语言的app 编辑:程序博客网 时间:2024/06/14 05:58

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总用量 60drwxr-xr-x. 3 root root  4096 8月  19 08:20 bindrwxr-xr-x. 2 root root  4096 8月  19 08:20 configdrwxr-xr-x. 2 root root  4096 8月  19 08:20 libs-rw-r--r--. 1 root root 28824 8月  19 08:20 LICENSEdrwxr-xr-x. 2 root root  4096 8月  20 09:02 logs-rw-r--r--. 1 root root   336 8月  19 08:20 NOTICEdrwxr-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

#允许立刻删除TOPICdelete.topic.enable=true#kafka产生的数据文件存放目录log.dirs=/opt/kafka_2_11_0_11_0/kafkalogs#当前主机名host.name=192.168.120.12zookeeper.connect=192.168.120.12:2181listeners=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]# jps13645 QuorumPeerMain13887 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]# jps13915 Jps13645 QuorumPeerMain[root@node2 bin]# ./start_kafka.sh [root@node2 bin]# jps13926 Kafka14168 Jps13645 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 <String: name=value>            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 <String: name>           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 <Integer: # of 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 <String:            A list of manual partition-to-broker     broker_id_for_part1_replica1 :           assignments for the topic being        broker_id_for_part1_replica2 ,           created or altered.                    broker_id_for_part2_replica1 :                                                  broker_id_for_part2_replica2 , ...>                                           --replication-factor <Integer:           The replication factor for each          replication factor>                      partition in the topic being created.--topic <String: 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 <String: urls>               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_dataWARNING: 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_dataTopic:user_dataPartitionCount:2ReplicationFactor:1Configs:Topic: user_dataPartition: 0Leader: 0Replicas: 0Isr: 0Topic: user_dataPartition: 1Leader: 0Replicas: 0Isr: 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-checkpointdrwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-0drwxr-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_dataWARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affectedAdding 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-checkpointdrwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-0drwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-1drwxr-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_dataTopic 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-checkpointdrwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-0.01c12e5c5a1a490aaa5f3254c55d5e7f-deletedrwxr-xr-x. 2 root root 4096 11月  9 14:31 user_data-1.57224767ec3b4877be7d8aef941feaa2-deletedrwxr-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_datahello kafkaaaaaabbbbbcccccdddddeeeeefffffggggghhhhh
可以看到已经收到producer端发送的消息。

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