前沿

业界已有的消息队列系统,在扩展性、可靠性、资源利用率和吞吐 率方面存在明显不足,故LinkedIn团队开始尝试设计一款新的消息队列系统,进而诞生了Kafka消息队列系统。源软件Kafka的应用越来越广泛。

思维导图

image

内容

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. 事件源

事件源是一种应用程序的设计风格,其中状态更改会产生一条带有 时间戳的记录,然后将这条以时间序列产生的记录进行保存。在面对非 常大的存储数据时,可以使用这种方式来构建非常优秀的后端程序。





startshineye
91 声望26 粉丝

我在规定的时间内,做到了我计划的事情;我自己也变得自信了,对于外界的人跟困难也更加从容了,我已经很强大了。可是如果我在规定时间内,我只有3分钟热度,哎,我不行,我就放弃了,那么这个就是我自己的问题,因为你自己...