这是我参与「第四届青训营 」笔记创作活动的第9天
这章我们学习消息队列,这是一个完全陌生的概念,我们按照下面这个顺序依次讲解
- 什么是消息队列?为什么要用消息队列?
- 消息队列为什么要分布式?
- 有哪些消息队列?
- 这些消息队列的对比
什么是消息队列?为什么要用消息队列?
举个例子,比如一个业务需要实时计算网站的点击量,那么就要把用户点击的事件作为数据流流入Flink做window计算。现在假设有无数用户一直在点,直接把这些事件放入Flink,但是Flink的消费能力有限,这么多数据一下子过来Flink直接懵了,正常点击事件直接变成ddos攻击了,这还玩个🔨啊
所以要把这些事件数据用一个东西缓冲一下,并且要保证FIFO(先进先出),显然队列能保证这个特性,所以消息队列应运而生
这就是使用消息队列的第一个好处,削峰
消息队列还可以异步和解耦,比如用户点击以后立马收到反馈,不用等漫长的Flink计算完,这样做到了异步。另外上游系统和下游系统是解耦开的,下游并没有调用请求,而是通过消息传递的方式获取数据
消息队列为什么要分布式?
首先一个原因是单击吞吐量小,分布式的吞吐量大
第二个原因分布式好扩容
第三个原因防止单机节点挂掉,类似HDFS的多副本容错
有哪些消息队列?
这里主要讲一下Kafka
Kafka
kafka是一个分布式的消息队列,吞吐量高。
另外可用性非常高,一个数据多副本分布式存储,容错不会丢数据
数据Exactly Once语义
缺点:
- 把数据攒一波再处理,延迟比较高
注意:本文只是对消息队列做一个简单了解,具体实现和原理需要进一步学习后再总结