Kafka
2019-08-16 09:34:30 4 举报
AI智能生成
Kafka知识导图梳理
作者其他创作
大纲/内容
选型
ActiveMQ
RabbitMQ
RocketMQ
场景
定位
非日志的可靠消息传输。
例如:订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等
例如:订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等
性能
队列较多、消息堆积时性能稳定
单机支持最高5万个队列,Load不会发生明显变化
1、在高吞吐、低延迟、高可用上有非常好的表现;消息堆积时,性能也很好。
2、api、系统设计都更加适在业务处理的场景。
3、支持多种消费方式。
4、支持broker消息过滤。
5、支持事务。
6、提供消息顺序消费能力;consumer可以水平扩展,消费能力很强。
7、集群规模在50台左右,单日处理消息上百亿;经历过大数据量的考验,比较稳定可靠。
2、api、系统设计都更加适在业务处理的场景。
3、支持多种消费方式。
4、支持broker消息过滤。
5、支持事务。
6、提供消息顺序消费能力;consumer可以水平扩展,消费能力很强。
7、集群规模在50台左右,单日处理消息上百亿;经历过大数据量的考验,比较稳定可靠。
优点
缺点
1、相比于kafka,使用者较少,生态不够完善。消息堆积、吞吐率上也有所不如。
2、不支持主从自动切换,master失效后,消费者需要一定的时间才能感知。
3、客户端只支持Java
2、不支持主从自动切换,master失效后,消费者需要一定的时间才能感知。
3、客户端只支持Java
功能
定时消息、Broker消息过滤、分布式事务消息、
Redis
Pusurse
ZeroMQ
Kafka
场景
定位
系统间的数据流管道,实时数据处理。
例如:常规的消息系统、网站活性跟踪,监控数据,日志收集、处理等
例如:常规的消息系统、网站活性跟踪,监控数据,日志收集、处理等
性能
队列/分区多时性能不稳定,明显下降。
消息堆积时性能稳定
消息堆积时性能稳定
单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长
优点
生态:Apache Kafka、Kafka Streams、KSQL 和 Kafka Connect
成熟度,支持多语言,百万级TPS
1、在高吞吐、低延迟、高可用、集群热扩展、集群容错上有非常好的表现;
2、producer端提供缓存、压缩功能,可节省性能,提高效率。
3、提供顺序消费能力
4、提供多种客户端语言
5、生态完善,在大数据处理方面有大量配套的设施。
2、producer端提供缓存、压缩功能,可节省性能,提高效率。
3、提供顺序消费能力
4、提供多种客户端语言
5、生态完善,在大数据处理方面有大量配套的设施。
缺点
Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长使用短轮询方式,实时性取决于轮询间隔时间;消费失败不支持重试;支持消息顺序,但是一台代理宕机后,就会产生消息乱序;社区更新较慢;
1、消费集群数目受到分区数目的限制。
2、单机topic多时,性能会明显降低。
3、不支持事务
2、单机topic多时,性能会明显降低。
3、不支持事务
功能
参考文档:https://baijiahao.baidu.com/s?id=1622162181716798340&wfr=spider&for=pc
子主题
基础概念
特点
消息不进入内存,直接写磁盘
顺序写日志文件
整体无顺序保证(FIFO)、单个分区FIFO
高吞吐、低延迟:几十万级吞吐、毫秒延迟
顺序写日志文件
零拷贝
MMP技术、sendfile内核处理、Java NIO Transform to/From
概念:指计算机在操作中,CPU不需要为数据在内存中拷贝消耗资源,通常指计算机在网络上传送文件时,不需要将文件内容拷贝到用户空间,而直接在内核空间中将文件传送到网络的方式
页缓存
源码分析
核心组件
Zookeeper
存储Broker原数据的元数据
节点路径:
Broker
Broker Leader选举
zookeeper管理Broker元数据
Controller在zookeeper注册watcher
Consumer
Producer
消息生产流程图
创建一条记录,记录中一个要指定对应的 Topic 和 Value,Key 和 Partition 可选。
先序列化,然后按照 Topic 和 Partition,放进对应的发送队列中。Kafka Produce 都是批量请求,会积攒一批,然后一起发送,不是调 send() 就立刻进行网络发包。
如果 Partition 没填,那么情况会是这样的:
• Key 有填。按照 Key 进行哈希,相同 Key 去一个 Partition。(如果扩展了 Partition 的数量那么就不能保证了)
• Key 没填。Round-Robin 来选 Partition。
这些要发往同一个 Partition 的请求按照配置,攒一波,然后由一个单独的线程一次性发过去。
先序列化,然后按照 Topic 和 Partition,放进对应的发送队列中。Kafka Produce 都是批量请求,会积攒一批,然后一起发送,不是调 send() 就立刻进行网络发包。
如果 Partition 没填,那么情况会是这样的:
• Key 有填。按照 Key 进行哈希,相同 Key 去一个 Partition。(如果扩展了 Partition 的数量那么就不能保证了)
• Key 没填。Round-Robin 来选 Partition。
这些要发往同一个 Partition 的请求按照配置,攒一波,然后由一个单独的线程一次性发过去。
Topic
OFFSET_TOPIC
Patition
流程
当存在多副本的情况下,会尽量把多个副本,分配到不同的 Broker 上。
Kafka 会为 Partition 选出一个 Leader,之后所有该 Partition 的请求,实际操作的都是 Leader,然后再同步到其他的 Follower。
当一个 Broker 歇菜后,所有 Leader 在该 Broker 上的 Partition 都会重新选举,选出一个 Leader。(这里不像分布式文件存储系统那样会自动进行复制保持副本数)
然后这里就涉及两个细节:
• 怎么分配 Partition
• 怎么选 Leader
关于 Partition 的分配,还有 Leader 的选举,总得有个执行者。在 Kafka 中,这个执行者就叫 Controller。
Kafka 使用 ZK 在 Broker 中选出一个 Controller,用于 Partition 分配和 Leader 选举。
Partition 的分配:
• 将所有 Broker(假设共 n 个 Broker)和待分配的 Partition 排序。
• 将第 i 个 Partition 分配到第(i mod n)个 Broker 上 (这个就是 Leader)。
• 将第 i 个 Partition 的第 j 个 Replica 分配到第((i + j) mode n)个 Broker 上。
Kafka 会为 Partition 选出一个 Leader,之后所有该 Partition 的请求,实际操作的都是 Leader,然后再同步到其他的 Follower。
当一个 Broker 歇菜后,所有 Leader 在该 Broker 上的 Partition 都会重新选举,选出一个 Leader。(这里不像分布式文件存储系统那样会自动进行复制保持副本数)
然后这里就涉及两个细节:
• 怎么分配 Partition
• 怎么选 Leader
关于 Partition 的分配,还有 Leader 的选举,总得有个执行者。在 Kafka 中,这个执行者就叫 Controller。
Kafka 使用 ZK 在 Broker 中选出一个 Controller,用于 Partition 分配和 Leader 选举。
Partition 的分配:
• 将所有 Broker(假设共 n 个 Broker)和待分配的 Partition 排序。
• 将第 i 个 Partition 分配到第(i mod n)个 Broker 上 (这个就是 Leader)。
• 将第 i 个 Partition 的第 j 个 Replica 分配到第((i + j) mode n)个 Broker 上。
Message
消息格式
Record
最佳生产实践
生态
Connect
KSQL
Confluent
Streaming
优点
扩张性
集群热扩展
高性能
高吞吐、低延迟、高并发
持久性、可靠性
消息持久化至磁盘、数据可备份,防止丢失
可回溯
分组消费
分组消费、负载均衡及高可用
使用场景
消息队列
子主题
日志系统
流处理组件
日志文件格式
参考文档
Kafka思维导图
https://www.cnblogs.com/QuestionsZhang/p/10456646.html
原来这才是Kafka
https://www.jianshu.com/p/d3e963ff8b70
部署
生产调优
外网内网
鉴权认证
高吞吐
消息部进内存,顺序写磁盘
零拷贝
数据批量发送
数据压缩
多分区,提高并发
架构原理
架构图
消息发送流程
核心设计
吞吐量
拉取系统
Brokers持久化消息,无内存压力,消费者采用PULL方式消费数据,
简化Kafka设计
消费者根据自身消费能力控制消费速度
消费者可以按需选择消费模式:批量、重复、回溯历史、指定时间段
可扩展性
当动态增加Broker时,新增Broker向zookeeper注册,生产者及消费者通过注册的watcher感知变化,并及时作出调整(什么调整)?
当消费能力不足时,增加Partition横向扩容
负载均衡
生产者根据用户配置的算法,将消息发送至指定的分区
多分区,每个分区有自己的副本,每个副本在不同的Broker上
多分区中有主分区,Lead Patition负责读写,zookeeper负载Fail over
通过zookeeper管理Broker与Consumer的加入与离开
设计要点
消费组
消息状态
消息持久化
消息有效期
批量发送
PUSH/PULL
同步异步
Broker组网
负载均衡
分区机制
插件支持
离线数据加载
一致性机制
https://blog.csdn.net/qq_37502106/article/details/80271800
常见面试题
如何设计Topic及分区
如何保证一致性?ISR原理?HDFS如何维护副本?及保证数据一致性?
为何Kafka性能优秀
如何保障消息有序?有何缺点?
什么时lag?如何发现消息有积压?如何快速消费百万级挤压?
如何使用Simple api?如何控制offset?
如何设置Consumer?如何设置消费速度及策略?
为何选型Kafka?
监控运维
历史
作用价值
解藕
基于统一的接口,消费者与生产者可独立扩展
冗余
消息持久化,防止数据处理过程中丢失及错误
扩展
可根据消息处理情况、动态灵活扩展服务端及消费者
缓冲
解藕读写,缓存消息,有利于控制及优化数据流经过系统的速度
削峰
顶住突发访问、防止突发请求导致系统崩溃
可恢复性
降低系统耦合,部分进程崩溃,不会导致系统失效,进程恢复后可继续处理队列中的消息
异步通信
送达保证
顺序保证
Leader机制与流程
分支主题
分支主题
0 条评论
下一页