Kafka流处理平台
1.具有三个特性
·发布和订阅记录的流,类似于一个消息队列或者企业信息系统
·存储信息流,并且具有容错机制
·消息产生就对消息进行处理
2.kafka主要两个用途
·当系统和应用之间具有强依赖的时候,kafka可以构建实时流数据管道
·构建实时流应用,可以响应和转换数据流
第3章 Kafka的设计和结构
3.1 kafka基本概念
- Producer:消息和数据的生产者,向Kafka的一个topic发布消息的进程/代码/服务。
- Consumer:消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程/代码/服务。
- Consurmer Group:逻辑概念,对于同一个Topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息。
- Broker:物理概念,Kafka集群中的每个Kafka节点。
- Topic:逻辑概念,Kafka消息的类别,对数据进行区分、隔离。
- Partition:物理概念,Kafka下的数据存储的基本单元。一个Topic数据,会被分散存储到多个Partition,每一个Partition是有序的。
- Replication:同一个Partition可能会有多个Replica,多个Replica之间数据是一样的。
- Replication Leader:一个Partition的多个Replica上,需要一个Leader负责该Partion上与Producer和Consumer交互。
- ReplicaManager:负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等。
3.2 Kafka概念延伸
Partition
- 每一个Topic被切分为多个Partition
- 消费者数据少于或者等于Partition的数目
- Broker Group中的每一个Borker保存Topic的一个或多个Partitions
- Consumer Group中的仅由一个Consumer读取Topic的一个或者多个Partition,并且是唯一的Consumer
Replication
- 当集群中有Broker挂掉的情况,系统可以主动地使Replicas提供服务。
- 系统默认设置每一个Topic的replication系数为1,可以在创建Topic时单独设置。
Replication特点
- Replication的基本单位是Topic的Partition
- 所有的读和写都从Leader进,Followers只是作为备份
- Follower必须能够及时复制Leader的数据
- 增加容错性和可扩展性
3.3 kafka基本结构
- Producer Api
- Consumer Api
- Streams Api
- Connectors Api
Kafka消息结构
3.4 Kafka特点
分布式
- 多分区
- 多副本
- 多订阅者
- 基于ZooKeeper调度
高性能
- 高吞吐量
- 低延迟
- 高并发
- 时间复杂度为O(1)
持久性和扩展性
- 数据可持久化
- 容错性
- 支持在线水平扩展
- 消息自动平衡
第4章 Kafka的应用场景和实战
4.1 kafka应用场景
- 消息队列
- 行为跟踪
- 元信息监控
- 日志收集
- 流处理
- 事件源
- 持久性日志
4.2 kafka简单案例
- 环境启动
- 简单生产者
- 简单消费者
第5章 Kafka高级特性
5.1 Kafka高级特性之消息事务
为什么要支持事务
- 满足“读取-处理-写入”模式
- 流处理需求的不断增强
- 不准确的数据处理的容忍度
数据传输的事务定义
- 最多一次:消息不会被重复发送,最多被传输一次,但也可能一次不传输。
- 最少一次:消息不会被漏发送,最少被传输一次,但也可能被重复传输。
- 精确的一次:不会漏传输也不会重复传输,每个消息都被传输一次而且仅仅被传输一次,这是大家所期望的。
事务保证
- 内部重试问题:Producer幂等处理
- 多分区原子写入
事务保证-避免僵尸实例
- 每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例
- Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据
- 一旦epoch被触发,任何具有相同的transactional.id和更旧的epoch的Producer被视为僵尸,Kafka会拒绝来自这些Producer的后续事务性写入。
5.2 Kafka高级特性之零拷贝
- 网络传输持久性日志块
- Java Nio channel.transforTo()方法
- Linux sendfile系统调用
文件传输到网络的公共数据路径
- 操作系统将数据从磁盘读入到内核空间的页缓存
- 应用程序将数据从内核空间读入到用户空间缓存中
- 应用程序将数据写回到内核空间到socket缓存中
- 操作系统将数据从socket缓冲区复制到网卡缓冲区,以便将数据经网络发出
零拷贝过程
- 操作系统将数据从磁盘读入到内核空间的页缓存
- 将数据的位置和长度的信息的描述符增加到内核空间
- 操作系统将数据从内核拷贝到网卡缓冲区,以便将数据经网络发出