Kafka 笔记

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

1710948477175.png

消息代理(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 层的构建通常包含以下步骤:

  1. 数据抽取(Extract): 从生产系统中采集原始数据,通常是通过 Kafka 这样的分布式消息队列。

  2. 数据清洗(Cleanse): 对原始数据进行清洗、转换、过滤等处理,以保证数据的质量和一致性。

  3. 数据加工(Transform): 进行数据的转换,使其适应数据仓库的模型和业务需求。这可能包括数据的结构调整、字段计算、关联等。

  4. 数据加载(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 (消费历史数据)]

Comment