Kafka基础命令
1. 基本信息
Linux安装kafka:链接
官方文档:链接
2. 基本概念
简单描述:
- Broker:已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker)。 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。
- Topic:Kafka将消息分门别类,每一类的消息称之为一个主题(Topic)。
- Producer:生产者可以将数据发布到所选择的topic(主题)中。生产者负责将记录分配到topic的哪一个 partition(分区)中。
- Consumer:订阅消息并处理发布的消息的对象称之为主题消费者(consumers)(扒自官方文档):
消费者使用一个消费组名称来进行标识,发布到topic中的每条记录被分配给订阅消费组中的一个消费者实例.消费者实例可以分布在多个进程中或者多个机器上。
如果所有的消费者实例在同一消费组中,消息记录会负载平衡到每一个消费者实例.
如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程.
如图,这个 Kafka 集群有两台 server 的,四个分区(p0-p3)和两个消费者组。消费组A有两个消费者,消费组B有四个消费者。
通常情况下,每个 topic 都会有一些消费组,一个消费组对应一个"逻辑订阅者"。一个消费组由许多消费者实例组成,便于扩展和容错。这就是发布和订阅的概念,只不过订阅者是一组消费者而不是单个的进程。
在Kafka中实现消费的方式是将日志中的分区划分到每一个消费者实例上,以便在任何时间,每个实例都是分区唯一的消费者。维护消费组中的消费关系由Kafka协议动态处理。如果新的实例加入组,他们将从组中其他成员处接管一些 partition 分区;如果一个实例消失,拥有的分区将被分发到剩余的实例。
Kafka只保证partition 分区内的记录是有序的,而不保证主题中不同分区的顺序。每个 partition 分区按照key值排序足以满足大多数应用程序的需求。但如果你需要总记录在所有记录的上面,可使用仅有一个分区的主题来实现,这意味着每个消费者组只有一个消费者进程。
- Consumer Group:消费组,用于归组同类消费者。每个consumer属于一个特定的consumer group,多个消费组可以共同消息一个Topic下的消息,每消费组中的消费者消费Topic的部分消息,这些消费者就组成了一个分组。
3. Kakfa常用命令
首先需要进入kafka安装路径再验证以下命令
- 新建topic命令,示例:新建topic:TestTopic,4分区2副本,命令如下
source /etc/profile && bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic TestTopic --partitions 4 --replication-factor 2
注意,副本数要小于broker的数量
- 查看所有的topic列表,命令如下:
source /etc/profile && bin/kafka-topics.sh --zookeeper localhost:2181 --list
- 查看topic详细信息,命令如下:
source /etc/profile && bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic TestTopic
截图中从左至右的列分别表示topic名称、partition编号,此partions的leader broker编号,副本存放的broker编号,同步broker编号
- 扩容partition,将刚才创建的topic中的partion由3个扩容到6个
source /etc/profile && bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic TestTopic --partitions 6
扩容结果如下
注意,partition的数量不能减少,否则会报错,所以扩容之前一定要确认原有partition的数量
- 删除topic
source /etc/profile && bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic TestTopic
如果只出现下面提示,需要将kafka的service.properties配置文件中的delete.topic.enable设置为true
正常情况删除返回日志如下:
以上对kafka的topic的增删改查基本命令介绍完成了,后续若学习到新的实用命令还会补充
上一篇: java学习之Swing篇(三)——简单画板的实现v1.0
下一篇: opencv第十章