前沿
业界已有的消息队列系统,在扩展性、可靠性、资源利用率和吞吐 率方面存在明显不足,故LinkedIn团队开始尝试设计一款新的消息队列系统,进而诞生了Kafka消息队列系统。源软件Kafka的应用越来越广泛。
思维导图
内容
1、消息队列
为什么引入消息队列?
高并发场景、系统来不及同步处理请求,接收到的请求往往会发生阻塞。大量的数据插入/更新请求同时到达数据库,导致行或表锁住,最后会因为请求堆积过多而触发"连接数过多的异常"错误。
什么是消息队列?
采用异步通信机制(消息发送者和接收者无需同时与消息队列进行数据交互),实现不同线程或进程之间通信的先进先出队列。
消息队列作用
1、应用解耦
多个应用可通过消息队列对相同消息进行处理,应用之间相互独立,互不影响
案例:客户端图片上传至消息系统,人脸识别系统进行人脸识别
2、异步处理
异步处理比串行/并行时间少
案例:系统注册实现短信邮件提示;传统做法是将客户信息保存的到数据库,然后短信通知用户,再邮件通知后返回。使用消息队列实现数据保存数据库之后,并写入数据到kafak中就返回响应。
3、数据限流
流量高峰进行限流,并且引起系统崩溃
案例:秒杀系统
4、消息通信
实现点对点消息队列或聊天
案例:im
2、为什么使用kafka?
kafka可以支持实时处理需求,也可以进行离线存储,又可支持水平拓展,它还拥有高吞吐量特性(数据零拷贝)。
3、kafka基本概念
大范围
消费者
Consumer:从kafka集群中的topic读取消息记录。
生产者
Producer:将消息记录写入到Kafka集群的topic主题进行存储;通过消息hash(key)%分区数计算写入的分区。
代理Broker
Kafka进程
消费者组
使用多线程读取数据:消费者程序在读取Kafka系统主题(Topic)中的数据时,通常会使 用多个线程来执行。 一个消费者组可以包含一个或多个消费者程序,使用多分区和多线 程模式可以极大提高读取数据的效率。
小范围
主题topic
不同业务类型的消息记录逻辑集合
分区Parition
是什么?
topic主题下消息物理存储,支持物理层面上的并发读写,以提高 Kafka集群的吞吐量。
特点?
每个分区里面消息有序,具有offset偏移量
一个分区只对应一个代理节点(Broker),一个代理节点可以管理 多个分区。
副本
Topic主题下分区的副本,保证Kafka高可用
记录
写入到Kafka集群里面的消息;每条记录包含一个键(Key)、值(Value)和 时间戳(Timestamp)。
4、工作机制
工作机制是:生产消息/消费消息
生产者(Producer)组件和消费者 (Consumer)组件互不影响,但又是必须存在的
Kafka是一个分布式系统,用Zookeeper来管理、协调Kafka集 群的各个代理(Broker)节点
5、Kafka使用范围
1、实时业务系统
Kafka能够和Spark、Flink、Storm等实时计算 引擎完美地结合
2、离线任务处理
Kafka也提供了应用接口(API),可以将主 题(Topic)中的数据导出到Hive仓库做离线计算。
6、Kafka的特性
1、异步生产数据(Producer)
生产者(Producer)写数据时不再区分同步和异 步,所有的操作请求均以异步的方式发送,这样大大地提高了客户端写 数据的效率
2、偏移量迁移(Consumer)
Consumer消费消息时候会记录消费数据的额偏移量,消费者(Consumer)应用程序可以把“消 费”记录提交从zk变成到Kafka集群,并以内部主题的方式进行存储,Kafka系统 将其命名为_ _consumer_offsets
3、安全机制
可以通过SSL和SASL 安全机制来进行身份确认
4、连接器
在外部系统与数据集之间建立一个数据流管道,以 实现数据的读与写
5、机架感知
使用 机架感知来让Kafka的备份数据分布到不同的机架上,以保证数据的高 可用性
6、数据流
将Kafka集群中的数据进行流处理之后再重新回写到Kafka集群 中
7、时间戳
写入的每一条消 息记录都加入了时间戳,用户 可以使用时间戳来跟踪和查找消息记录
7、Kafka适用于哪些场景
1. 日志收集
零散的日志收集到Kafka集群中,然 后通过Kafka的统一接口将这些数据开放给不同的消费者
2. 消息系统
线上业务流量很大的应用,可以使用Kafka作为缓冲,以减少服务 端的压力
3.用户轨迹
Kafka记录浏览器用户或者手机App用户产生的各种记录
4. 记录运营监控数据
Kafka也可用来记录运营监控数据,包括收集各种分布式应用系统 的数据(如Hadoop系统、Hive系统、HBase系统等)
5. 实现流处理
Kafka 是一个流处理平台,所以在实际应用场景中也会与其他大数 据套件结合使用,例如Spark Streaming、Storm、Flink等
6. 事件源
事件源是一种应用程序的设计风格,其中状态更改会产生一条带有 时间戳的记录,然后将这条以时间序列产生的记录进行保存。在面对非 常大的存储数据时,可以使用这种方式来构建非常优秀的后端程序。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。