Kafka集群配置通常有三种,最简单的下面的第一种,也是默认的一种:
版本选择:
kafka_2.11-0.11.0.0.tar.gz
zookeeper-3.4.10.tar.gz
可以到kafka官网和zookeeper官网上下载到安装包
单节点,单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
完整的路径是这样:
首先进入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开头的路径,这个路径在服务启动启动后就被清空了,它是个临时目录。
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]#
查看/opt/kafka_2_11_0_11_0/logs/目录已经产生了相关的日志文件
启动命令:
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]#
进入到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.
./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
查看刚创建好的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
把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]#
[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个目录都已经被完全清理
执行./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
创建一个把数据发送到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的相关分享。