kafka
2020-08-11 17:20:39 51 举报
AI智能生成
kafka
作者其他创作
大纲/内容
简介
分布式流平台
发布,订阅记录流
消息队列
企业消息系统
持久化接受到的记录流
处理接收到的记录流
应用
建立实时数据流管道 从而可靠的在系统或程序间共享数据
构建实时流应用程序,能够变换或者对数据进行相应处理
概念
kafka运行在一个或多个服务器集群cluster上
kafka集群分类存储的记录流被称为主题topics
每个消息记录包含一个键 一个值和时间戳
核心api
生产者api
允许应用程序发布记录流或多个kafka的topics
消费者api
允许应用程序订阅一个或多个主题,并处理执行记录接收的记录流
streams api
允许应用程序充当流处理器,从一个或多个主题中获取输入流,并产生一个或多个输出流,能够有效的变输入流为输出流
connector api
允许构建和允许可重用消费者,能够把kafka主题连接到先用的应用程序或数据系统
例如连接到数据的连接器可能获取每个表的变化
图
通信
tcp
主题 topic
支持多用户订阅
可以有0个1个或多个消费者订阅
日志分区
有序、不可变消息序列
偏移量
唯一标识
分区会给每个消息分配一个顺序id号
集群保留所有发布记录,不管有没有被消费过
可配置删除旧数据策略
可设置保留策略
性能与数据量大小无关
保留每个消费者元数据中最基础的数据就是消费者正在处理的当前记录的偏移量offset或位置position
由消费者 consumer控制
消费者可以在任何喜欢的位置读取数据
实现kafka消费者代价很小
消费者增加或减少不对集群产生较大影响
好处
允许数据扩展到更多服务器上
分区是并行处理的基础单元
分布式
服务器共享分区进行数据请求处理
一个 leader
处理所有读取和写入分区的请求
0个或多个followers
被动拷贝数据
选举产生leader
生产者 produces
发布数据到topic
负责把记录分配到分区
可以轮训进行平衡负载
也可以用语义分区算法
发送消息时根据时间属性给一个偏移量
消费者 consumer
消费者群 consumer group来标识自己
每个消息只会发给消费者群中的一个消费者的一个实例
消费者实例
负载均衡
同一个消费者群 consumer group
广播
不同消费者群
图
只能保证一个分区中的消息有序,不能保证多个分区中消息有序
只分一个分区
消息系统
两种模式
队列
一组消费者可以从服务器读取数据记录,每个记录都会被其中的一个消费者处理
发布--订阅
记录被广播到所有的消费者
kafka更强的消息顺序能力
并行性分区主题
每个分区指定给消费者群众的一个消费者
消费者群中的消费者数多于分区数时 闲置
kafka作为存储系统
消息数据写到磁盘和备份分区
磁盘结构很好扩展
与数据量无关
特殊的分布式文件系统
高性能
低延迟
只能自备份和自我复制
kafka的流处理
流处理实时数据流
从输入的主题联系获取数据流
进行一系列处理
产生联系的数据流到输出主题
实际应用
消息
消息中间件
低延迟
高可用
网站活动跟踪
实时处理
实时监控
数据量大
监控数据处理
日志聚合
性能
低延迟
高可用
流处理
数据流处理
event sourcing
commit log
设计
目标
支持分区,分布式,实时数据处理数据源并创建新的数据源,并保证容错性
存储
写入持久化日志,不需要立刻刷新磁盘
以pagecache为中心的设计风格
持久化队列像日志简单的读取好追加到文件尾
所有操作O1
无性能代价无限量磁盘空间
保存消息时间长
消息聚合
producer一次 发送多个消息
压缩消息
直接向leader节点发消息
可以自定义策略发送到那个分区
同一个用户顺序消费
consumer一次收一批消息
通过给leader partition发fetch请求指定offset
consumer对消费有绝对的控制权,可以重新设置offset从新消费
consumer pull数据
每个consumer对应一个分区,对于同一条消息只分给一个consmer
重新消费特别容易
标准二进制消息格式
pagecache 和sendfile组合 在消费者只写的情况下看不到磁盘活动
sendfile和更多的zero-copy背景知识见zero-copy
选一个broker作为controller
负责一个故障节点引起的所有分区leader变更
controller故障选取新的broker
可扩展的持久化能力
直接导数据
失败数据不丢失 重新处理
压缩日志
所有consumer能够消费的消息都有存储
消息顺序不变
消息偏移量,offset不变
从头开始处理日志的consumer都能拿到每个key的最终状态
删除的消息在某个时间段内可以看到
消息策略
at most once
可能丢失 不会重复
log 位置信息
at least once
可能重复 不会丢失
log 消息处理结果
exactly once
不丢失 不重复,只发一次
上面两个都存且存到同一个位置上
容灾核心是日志复制
维护一个同步备份的集合
当数据同步到所有节点时候提交
每个节点都是可以作为leader
可以容忍n-1个备份不可用
客户的决定是否提交
不需要故障节点回恢复数据
producer写数据时候可以选择等待几个节点相应
限流
每个唯一客户端group都有一个集群配置的固定限额
基于broker
限流以后降速
0 条评论
下一页