一、kafka流式数据平台具备的
特点
1、提供事件流的发布和订阅,即具备数据注入功能。
2、存储事件流数据的节点具有故障容错的特点,即具备数据存储功能。
3、能够对实时的事件流进行流式地处理和分析,即具备流处理功能。
核心组件:
生产者(producer):应用程序发布事件流到kafka的一个或多个主题。
消费者(comsumer):应用程序订阅kafka的一个或多个主题,并处理事件流。
连接器(connector):将kafka主题和已有数据源进行连接,数据可以呀互相导入或者导出。
流处理(processor):从kafka主题消费输入流,经过处理后,产生输出流到输出主题。
二、基本概念
1、分区模型
主题:是发布到Kafka集群的信息,这些信息都有一个类别,即使主题。
分区:每个分区都是一个有序的、不可变的记录序列,新的信息会不断追加到提交日志。
偏移量:分区中的每条消息都会按照时间顺序分配到一个单调递增的顺序编号,这个顺序编号能够唯一地定位当前分区中的每一条消息。
Kafka集群为每个主题维护了分布式的分区(partition)日志文件,物理意义上可以把主题看作分区的日志文件。
2、消费模型
推送模型(push)
特点:A、由消息代理记录消费者的消费状态
B、无法保证消息的处理语义,即是当消费进程挂掉或者网络原因没有收到消息,造成消息丢失。
拉取模型(pull):
特点:A、由消费者自己记录消费状态
B、消费者可以按照任意的顺序消费消息。
3、分布式模型
Kafka集群存在主副本(leader)和从副本(Follower),主副本会负责所有的客户端读写操作,备份副本(从副本)仅仅从主副本同步数据。
4、文件系统的持久化与数据传输效率
预读:提前将一个大的磁盘块读入内存。
后写:将很多小的逻辑写操作合并起来组合成一个大的物理写操作。
磁盘缓存:是操作系统中的内存剩余的所有空闲内存空间,所有的磁盘读写操作都会经过这些统一的内存空间,即是磁盘缓存。
文件系统持久化操作:所有的数据都立即写入文件系统的持久化日志文件,但不进行刷新数据的任何调用,数据会首先被传输到磁盘缓存,操作系统随后会将这些数据定期自动刷新到物理磁盘。
传统读取磁盘文件方式:
零拷贝技术:将磁盘文件的数据复制到页面缓存中一次,然后将数据从也难缓存直接发送到网络中,避免了重复的复制操作。特点:复制少,更快读取数据,延迟少
5、生成者与消费者
发布的两种方式:
缓冲机制:在发送消息前会收集尽可能多的数据,通过每次牺牲一点点额外的延迟来换取更高的吞吐量。
消费者读取方式一:消息代理主动地“推送“消息给下游的消费者,由消息代理控制数据传输的速率,但是消息代理对下游消费者是否能及时处理不得而知。
消费者读取方式二:消费者从消息代理主动地“拉取”数据,消息代理是无状态的,它不需要标记哪些消息被消费者处理过,也不需要保证一条消息只会被一个消费者处理。消费者的拉取请求以阻塞式、长轮询的方式等待,直接有新的数据到来。
指定的字节数量:表示消息代理在还没有收集足够的数据时,客户端的拉取请求就不会立即返回。
6、副本机制和容错处理
主副本与备份副本:始终尽量保持数据同步,日志文件总是相同,都有相同的偏移量和相同顺序的消息。备份副本挂掉,则从备份副本的同步副本集合中移除这个挂掉的备份副本;主副本挂掉,备份副本重新赶上主副本,则会将其加入到主副本的同步集合中。
容错条件:满足以下两个条件,叫 正在同步中
ISR:每个分区的主副本会跟踪正在同步中的备份副本节点,即 In Sync Replicas
提交机制:
7、分区属性
来源 《Kafka技术内幕:图文详解Kafka源码设计与实现.郑奇煌》学习笔记