文章目录
一、基本概念
1、Topic(主题)
①kafka中的消息以topic为单位进行归类,生产者负责将消息发送到特定的topic,而消费者负责订阅topic并进行消费。
②topic是一个逻辑上的概念,为了提升性能引入了partition(分区)的概念,partition是物理分组。一个topic可以包含多个partition,同一个topic下的不同partition包含的消息是不同的。
2、Partition(分区)
①一个topic的不同partition可以放到不同broker(节点)上,充分利用机器资源。
②每个分区在不同的服务器上,其实就相当于是一个目录,通过分区就将topic里的数据,放到不同的服务器上实现分布式存储。
3、Broker(节点)
broker是kafka的一个实例,一台kafka服务器上会有一个或多个实例。多台kafka服务构成了kafka集群。
4、Replica(副本)
①为了保证partition中数据安全,所以设置了每个partition可以设置多个replica,每个replica都有角色之分,只有一个replica作为leader,而剩余的follower。生产者在发送数据的时候,是直接发送到leader partition中的,然后follower partition从leader那里同步数据,消费者消费数据的时候,也是从leader那里去消费的。
②副本的数量不能超过kafka节点的数量
5、示例
如图Kafka 集群中有4个 broker,主题A中有3个分区(P0、P1、P2),且副本因子(即副本个数)也为3,如此每个分区便有1个 leader 副本和2个 follower 副本。
二、相关命令
相关命令脚本位于kafka安装位置的bin目录下
1、主题帮助命令kafka-topics.sh
选项 | 含义 |
---|---|
- -bootstrap-server | 指定kafka的broker的服务列表 |
- -create | 创建新的topic,后面紧跟topic名称, 例如: --create --topic test |
- -delete | 删除topic,后面紧跟topic名称, 例如: --delete --topic test |
- -describe | 列出topic的描述信息,多个用逗号分隔 |
①列出已有的主题
#列出由 kafka1:9092、kafka2:9093 和 kafka3:9094 指定的 Kafka 集群中的所有主题。如下图所示,此时还没有创建任何主题。
sh kafka-topics.sh --list --bootstrap-server kafka1:9092,kafka2:9093,kafka3:9094
②创建主题
#在 Kafka 集群中创建一个名为 test 的新主题,该主题具有 3 个分区和 3 个副本,以确保数据的高可用性和容错能力。如下图所示新的主题已创建完成
sh kafka-topics.sh --create --bootstrap-server kafka1:9092,kafka2:9093,kafka3:9094 --topic test --partitions 3 --replication-factor 3
③查看主题描述信息
sh kafka-topics.sh --describe --bootstrap-server kafka1:9092,kafka2:9093,kafka3:9094 --topic test
#可以看到分区0的leader副本在broker id=2的节点上,Replicas表示该0号分区所有的副本所在的broker id,Isr表示存活的broker节点。
使用kafka-server-stop.sh关闭broker1节点,可以看到2号分区的leader副本已经由broker 1节点上的副本更换为broker 3节点上的副本了,同时Isr的broker存活列表中已经没有broker 1了。
2、生产消息
#在控制台输入数据进行消息的生产
kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9093,kafka3:9094 --topic test
/bitnami/kafka/data
存放数据的路径,其中test-0 test-1 test-2 是分区,可以看到一开始三个文件夹中日志文件都为空
写入一条消息hello world,发现在test-1文件夹下的日志文件进行了数据的增加
3、消费数据
sh kafka-console-consumer.sh --bootstrap-server kafka1:9092,kafka2:9093,kafka3:9094 --topic test