kafka 是一个分布式的消息队列框架
主题(Topic)
主题类似于数据库中的表
Topic 是半结构化的 可以存入不同类型的数据
分区(partition)
是指对主题的分区,一个topic可以有多个partition
分区让kafka拥有更好的拓展性
提交的消息不可变
分区内的消息有一个唯一偏移量,在本分区是不可重复的,在其他分区不是一定唯一的。
偏移量(offset)
每条消息拥有一个offset 记录他在当前分区的位置
在所在的分区 offset只能有一个 不可重复
在不同的分区 offset可以重复
偏移量会在本分区依次递增
kafka可以根据offset对消息进行提取
消息(Record)
使用 Key:Value 键值对形式存储
如果不指定Key 则为空 并轮询的写入到partition中
会优先对同一Key的Record 存储在同一分区
Kafka 消息备份机制
可以通过
replication-factor=3
来设置存在数量
每个Broker中 存在一个 leader 和多个 follower
leader 和 follower存在不同的partition中 follower数量由 replication-factor
决定
如果备份数量设置的比分区数量大会怎么样?可能会导致集群启动失败,因为系统无法正常分配和复制数据。具体的后果取决于具体的系统和配置。
每个消息的leader在同一Broker中 是否会固定在一个Partiton中?一个消息的leader不会固定在一个Broker或者一个Partition中。
follower是否会跨Broker?是的,Kafka的架构设计中,Follower副本会分布在不同的Broker上
ISR
正在同步的数据集
包含了数据的同步状况
如果同步成功则加入到ISR 不成功将从ISR暂时移除 直到成功
ISR存在哪台机器?在新的Kafka版本中,ISR(In-Sync Replicas)的信息是保存在Kafka的Controller中的。Kafka集群中会有一个Broker充当Controller,负责管理和维护整个集群的状态
ISR存的什么信息 Broker消息 还是 Partition信息ISR列表,该列表中包含了能够及时跟上Leader副本的Follower副本的ID
每个任务有一个ISR还是每个集群有一个ISR还是每个Broker有一个ISR每个Partition都有一个ISR
消息代理(Broker)
Broker 类似于一个服务器上的jvm实例?可以将Broker理解为Kafka系统中的一个服务器节点或者说是一个JVM进程。
一个Broker是不是一个jvm进程?是的,Kafka中的每个Broker都是一个独立的JVM进程,可以独立运行和处理消息。这种设计使得Kafka集群能够通过增加Broker来进行水平扩展,提高整体的处理能力和容错性。
生产者(producer)
消息发送者 可以是Flink Python Go Scala 各种语言的来源
消费者 (consumer)
流式处理消息队列内的数据 Flink框架的性能较高 且具有横向拓展能力 其他语言也可以
kafka 集群组成
kafka Cluster 由多个Broker组成 每个Broker通常是一个服务器
什么是 kafka dwd 层
具体到 Kafka 生态系统,DWD 层的构建通常包含以下步骤:
数据抽取(Extract): 从生产系统中采集原始数据,通常是通过 Kafka 这样的分布式消息队列。
数据清洗(Cleanse): 对原始数据进行清洗、转换、过滤等处理,以保证数据的质量和一致性。
数据加工(Transform): 进行数据的转换,使其适应数据仓库的模型和业务需求。这可能包括数据的结构调整、字段计算、关联等。
数据加载(Load): 将经过清洗和转换的数据加载到 DWD 层中,通常是关系型数据库、分布式文件系统(如 Hadoop 的 HDFS)或者专门的数据仓库中。
Kafka 目录结构
bin 脚本
config 配置
lib 依赖包
site-docs 文档
CLI
kafka-topics.sh
创建主题
kafka-topics.sh --create --bootstrap-server IP:PORT(9092) --replication-factor <副本数> --partitions <分区数> --topic <主题名>
查看主题
kafka-topics.sh --bootstrap-server IP:PORT(9092) --list
删除主题
kafka-topics.sh --bootstrap-server IP:PORT(9092) --delete --topic <主题名>
查看主题
kafka-topics.sh --bootstrap-server IP:PORT(9092) --describe [--topic <主题名>]
修改主题
kafka-topics.sh --bootstrap-server IP:PORT(9092) --alter --topic <主题名> --partitions <分区数>
分区数 ( partitions ) 只能增加 不能减少
kafka-console-producer.sh
启动生产者脚本
kafka-console-producer.sh --broker-list IP:PORT(9092) --topic <主题名>
kafka-console-consumer.sh
启动消费者脚本
kafka-console-consumer.sh --bootstrap-server IP:PORT(9092) --topic <主题名>
[--from-beginning (消费历史数据)]