kafka学习笔记四:搭建Kafka集群
来源:互联网 发布:学c语言的app 编辑:程序博客网 时间:2024/06/14 05:58
Kafka集群配置通常有三种,最简单的下面的第一种,也是默认的一种:
- 单节点,单Broker
- 单节点,多Broker
- 多节点,多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的相关分享。
- kafka学习笔记四:搭建Kafka集群
- 【Kafka】Kafka集群搭建
- Kafka集群搭建02-Kafka 集群部署
- Zookeeper 集群+kafka集群+kafka manager搭建
- kafka集群搭建
- kafka集群搭建
- kafka集群搭建
- kafka集群搭建
- kafka集群搭建
- 搭建kafka集群
- 搭建kafka集群
- kafka集群环境搭建
- Kafka集群搭建
- 搭建kafka集群
- kafka集群环境搭建
- Zookeeper+Kafka集群搭建
- KAFKA集群环境搭建
- 搭建Kafka集群环境
- MySQL 插入数据时,中文乱码问题的解决
- Linux常用命令和符号
- 文章标题
- 【蓝桥杯】【趣味算式】
- Android基础ConstrainLayout约束布局的介绍和使用
- kafka学习笔记四:搭建Kafka集群
- spring-依赖注入的实现
- RabbitMQ日志问题
- Android 设计模式——策略模式
- Spring 7大功能模块的作用[转]
- HDOJ题目分类
- 唯快不破:TCP的分段和IP的分片
- (4.1.40.5)Android手势检测GestureDecetor详解
- 项目中为什么首先spring cloud,而不是dubbo