慕课网Kafka教程笔记

Kafka流处理平台

1.具有三个特性

·发布和订阅记录的流,类似于一个消息队列或者企业信息系统

·存储信息流,并且具有容错机制

·消息产生就对消息进行处理

2.kafka主要两个用途

·当系统和应用之间具有强依赖的时候,kafka可以构建实时流数据管道

·构建实时流应用,可以响应和转换数据流

 

第3章 Kafka的设计和结构

3.1 kafka基本概念

  1. Producer:消息和数据的生产者,向Kafka的一个topic发布消息的进程/代码/服务。
  2. Consumer:消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程/代码/服务。
  3. Consurmer Group:逻辑概念,对于同一个Topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息。
  4. Broker:物理概念,Kafka集群中的每个Kafka节点。
  5. Topic:逻辑概念,Kafka消息的类别,对数据进行区分、隔离。
  6. Partition:物理概念,Kafka下的数据存储的基本单元。一个Topic数据,会被分散存储到多个Partition,每一个Partition是有序的。
  7. Replication:同一个Partition可能会有多个Replica,多个Replica之间数据是一样的。
  8. Replication Leader:一个Partition的多个Replica上,需要一个Leader负责该Partion上与Producer和Consumer交互。
  9. ReplicaManager:负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等。

3.2 Kafka概念延伸

Partition

  1. 每一个Topic被切分为多个Partition
  2. 消费者数据少于或者等于Partition的数目
  3. Broker Group中的每一个Borker保存Topic的一个或多个Partitions
  4. Consumer Group中的仅由一个Consumer读取Topic的一个或者多个Partition,并且是唯一的Consumer

Replication

  1. 当集群中有Broker挂掉的情况,系统可以主动地使Replicas提供服务。
  2. 系统默认设置每一个Topic的replication系数为1,可以在创建Topic时单独设置。

Replication特点

  1. Replication的基本单位是Topic的Partition
  2. 所有的读和写都从Leader进,Followers只是作为备份
  3. Follower必须能够及时复制Leader的数据
  4. 增加容错性和可扩展性

3.3 kafka基本结构

  1. Producer Api
  2. Consumer Api
  3. Streams Api
  4. Connectors Api

Kafka消息结构

3.4 Kafka特点

分布式

  1. 多分区
  2. 多副本
  3. 多订阅者
  4. 基于ZooKeeper调度

高性能

  1. 高吞吐量
  2. 低延迟
  3. 高并发
  4. 时间复杂度为O(1)

持久性和扩展性

  1. 数据可持久化
  2. 容错性
  3. 支持在线水平扩展
  4. 消息自动平衡

 

第4章 Kafka的应用场景和实战

4.1 kafka应用场景

  1. 消息队列
  2. 行为跟踪
  3. 元信息监控
  4. 日志收集
  5. 流处理
  6. 事件源
  7. 持久性日志

4.2 kafka简单案例

  1. 环境启动
  2. 简单生产者
  3. 简单消费者

 

第5章 Kafka高级特性

5.1 Kafka高级特性之消息事务

为什么要支持事务

  1. 满足“读取-处理-写入”模式
  2. 流处理需求的不断增强
  3. 不准确的数据处理的容忍度

数据传输的事务定义

  1. 最多一次:消息不会被重复发送,最多被传输一次,但也可能一次不传输。
  2. 最少一次:消息不会被漏发送,最少被传输一次,但也可能被重复传输。
  3. 精确的一次:不会漏传输也不会重复传输,每个消息都被传输一次而且仅仅被传输一次,这是大家所期望的。

事务保证

  1. 内部重试问题:Producer幂等处理
  2. 多分区原子写入

事务保证-避免僵尸实例

  1. 每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例
  2. Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据
  3. 一旦epoch被触发,任何具有相同的transactional.id和更旧的epoch的Producer被视为僵尸,Kafka会拒绝来自这些Producer的后续事务性写入。

5.2 Kafka高级特性之零拷贝

  1. 网络传输持久性日志块
  2. Java Nio channel.transforTo()方法
  3. Linux sendfile系统调用

文件传输到网络的公共数据路径

  1. 操作系统将数据从磁盘读入到内核空间的页缓存
  2. 应用程序将数据从内核空间读入到用户空间缓存中
  3. 应用程序将数据写回到内核空间到socket缓存中
  4. 操作系统将数据从socket缓冲区复制到网卡缓冲区,以便将数据经网络发出

零拷贝过程

  1. 操作系统将数据从磁盘读入到内核空间的页缓存
  2. 将数据的位置和长度的信息的描述符增加到内核空间
  3. 操作系统将数据从内核拷贝到网卡缓冲区,以便将数据经网络发出

第6章 课程总结

猜你喜欢

转载自blog.csdn.net/qq_28900249/article/details/89515113