本系列主要开始处理关于kafka的一些技术知识点,尽量会以代码和实际命令为主要表达形式来做表现。
本文主要是关于如何在客户端使用命令做一个描述,其实我本来不想写的,但是今天在公司有同事居然不会,所以我觉得还是描述一下。而且在你没有代码的时候,运维端你要操作的时候这个其实也是有点用的。
本文目的是如何使用命令,以及如何在0基础的时候查看帮助文档。后续会不断完善,这里先做一个初步的描述,后面我发现其他的继续加上去。
首先我们来看看这一套命令的位置,位于你kafka安装目录下面的bin目录下面。
[root@iZ2ze1q2h6sy9dblhemmhmZ bin]# pwd
/opt/kafka_2.12-2.1.1/bin
[root@iZ2ze1q2h6sy9dblhemmhmZ bin]# ls
connect-distributed.sh kafka-console-consumer.sh kafka-delete-records.sh kafka-producer-perf-test.sh kafka-server-stop.sh trogdor.sh zookeeper-shell.sh
connect-standalone.sh kafka-console-producer.sh kafka-dump-log.sh kafka-reassign-partitions.sh kafka-streams-application-reset.sh windows
kafka-acls.sh kafka-consumer-groups.sh kafka-log-dirs.sh kafka-replica-verification.sh kafka-topics.sh zookeeper-security-migration.sh
kafka-broker-api-versions.sh kafka-consumer-perf-test.sh kafka-mirror-maker.sh kafka-run-class.sh kafka-verifiable-consumer.sh zookeeper-server-start.sh
kafka-configs.sh kafka-delegation-tokens.sh kafka-preferred-replica-election.sh kafka-server-start.sh kafka-verifiable-producer.sh zookeeper-server-stop.sh
我们看到在这个路径下面有一系列关于kafka客户端操作的命令,我们只说一些常用的,不常用的后面用到我加上去。
kafka-console-consumer.sh:关于消费消息时候使用的指令
kafka-console-producer.sh:关于生产消息时候使用的指令
kafka-topics.sh:关于操作topic主题时候使用的指令
下面我们就一个个开始看看怎么用。
broker端主要就是启动kafka服务以及启动zk服务。
# 启动kafka
./kafka-server-start.sh -daemon ../config/server.properties
# 启动zk
./zkServer.sh start
主题的概念我们暂且在第一篇操作时候按下不表,后面我们做原理学习的时候再说。这里默认会了。
我们先来看一个操作,就是查看官方帮助文档。
进入bin目录下面:
此时你不知道kafka的主题侧有啥参数,你就输入kafka-topics.sh这个,然后回车,你会看到官方所有的参数都会列出来。
# 这一行是在说这个命令./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.downconversion.enable
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
--exclude-internal exclude internal topics when running
list or describe command. The
internal topics will be listed by
default
--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
# 对topic操作必须设置连接哪个zk
--zookeeper <String: hosts> REQUIRED: The connection string for
the zookeeper connection in the form
host:port. Multiple hosts can be
given to allow fail-over.
OK,我们就先简单的对上面几个参数加一个注释,注意我把参数分为了动作类参数和非动作类参数,动作类参数就是一类型的操作,这种动作类的操作一个操作就只能操作一个,不能多个存在。
非动作类参数是在动作类参数上附加的。我们来演示一波。具体怎么用。
我们这里就把上面这几个参数列出来再这里,清晰的看一下:
# 动作类参数:当你创建主题的时候就需要加这个
--create
# 动作类参数:当你删除主题的时候就需要加这个
--delete
--delete-config <String: name>
# 动作类参数:当你要查看主题的详细信息的时候就需要加这个
--describe
# 输出参数描述
--help
# 动作类参数:查看所有主题列表的时候加这个参数
--list
# 创建主题的时候指定分区个数
--partitions <Integer
# 创建主题的时候指定副本个数
--replication-factor <Integer:
# 你要操作那个主题,这个参数后面指定
--topic <String: topic>
# 对topic操作必须设置连接哪个zk目录,因为不同目录可以放置相同名字的主题
--zookeeper <String: hosts>
我们就围绕这几个参数来操作一下主题。
我们首先明确,创建主题的动作是–create
其次你要创建主题,那你需要操作主题所以需要–topic
然后你要操作主题,那你必须指定zk路径,我目前已经在zk的根目录下面创建了一个myKafka的路径,我就直接用了。所以你需要–zookeeper这个参数。
然后你要创建主题,你得设置副本数,所以你得有–replication-factor
然后你要创建主题,你得设置分区数,所以你得有–partitions
基于此,你基本过了一遍那些topic后面的参数,能加的也就这几个,所以我们可以得到这个命令了。
./kafka-topics.sh --zookeeper localhost:2181/myKafka --topic topic-levi --partitions 4 --replication-factor 1 --create
这样我们就在zk的/myKafka 路径下面创建出一个分区为4,副本个数为1(其实就是leader),名字叫topic-levi的主题了,就是这么自然。
在我们创建好主题之后,有时候我们要查看一下这个主题的详细信息,比如分区数,副本数,等等各种信息。也或者是你刚接触一个集群,你想了解一下该集群的kafka信息。
1、查看主题列表
我们看到上面列出了–list这个动作参数。
查看主题集合列表,你得加–list参数
你得指定zk地址。–zookeeper,注意这里也要指定好zk的目录,因为多个目录可以存在相同名字的主题
因为你并不操作主题,所以无需指定–topic,所以此时就足够了。
于是我们就得到这个指令的操作全命令。
./kafka-topics.sh --zookeeper localhost:2181/myKafka --list
__consumer_offsets
kafka
topic-levi
topic_01
topic_1
topic_2
我们看到了这是我这个目录下面所有的主题信息。都已经列出来了。
2、查看主题详情
上面我们列出了主题列表的参数,现在我们假如想看一下topic-levi这个主题的详细信息,我们知道是
–describe 这个动作参数。
因为我们要指定topic所以我们要加一个属性参数–topic
而且我们要具体查看主题,所以需要指定zk地址,所以需要–zookeeper
于是我们此时就可以得到这个指令:
./kafka-topics.sh --zookeeper localhost:2181/myKafka --topic topic-levi --describe
Topic:topic-levi PartitionCount:4 ReplicationFactor:1 Configs:
Topic: topic-levi Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: topic-levi Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: topic-levi Partition: 2 Leader: 0 Replicas: 0 Isr: 0
Topic: topic-levi Partition: 3 Leader: 0 Replicas: 0 Isr: 0
我们看到主题分区数一共是4个,副本数就是1个,分区分别是0,1,2,3,其余各种信息后面再说。
生产者的使用方式和上面的主题是一样的,我们只需要按照规范文档操作即可,
./kafka-console-producer.sh --topic topic-levi --broker-list localhost:9092
输入回车,你直接输入投递消息即可。
消费者的使用方式和上面的主题是一样的,我们只需要按照规范文档操作即可,
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-levi --group group1
输入回车,就能消费订阅的主题消息了。这里注意一下,你消费的broker需要在--bootstrap-server这个参数追加,其次我在后面指定了消费者组的参数,同一个消费者组消费主题消息是互斥的。这个后面再说,其次你还可以加上消费的策略,--from-beginning就是从一开始消费,或者可以从当前进度消费,这个后面概念的时候再说。
这个其实是个入门操作文档,大部分时间我们都是在编码中处理消息的。所以这个可能更偏向运维时候使用,但是这个是基础,所以作为开发还是要掌握的。