美文网首页
【Kafka系列】1.1 总览 - 分布式消息中间件

【Kafka系列】1.1 总览 - 分布式消息中间件

作者: 熊本极客 | 来源:发表于2020-07-28 20:52 被阅读0次

    1.kafka的用途和使用场景有哪些?

    (1)消息系统:应用解构、缓冲、流量削峰、异步通信、提高扩展性等,还有消息保序和回溯消费的功能。

    ①应用解耦:在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

    ②缓冲:在任何重要的系统中,都会有需要不同的处理时间的元素。例如,加载一张图片比应用过滤器花费更少的时间。消息队列通过一个缓冲层来帮助任务最高效率的执行———写入队列的处理会尽可能的快速。该缓冲有助于控制和优化数据流经过系统的速度。

    ③流量削峰:在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

    ④异步通信:用户不想也不需要立即处理消息的场景下,消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

    ⑤扩展性:因为消息队列解耦了数据处理的过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。不需要改变代码、不需要调节参数。扩展就像调大电力按钮一样简单。

    ⑥消息保序:在保证数据处理的顺序的场景下,消息队列的队列机制是排序的,并且能保证数据会按照特定的顺序来处理。Kafka保证一个Partition内的消息的有序性。

    (2)存储系统:kafka把消息持久化到磁盘,降低数据丢失的风险。kafka的消息持久化功能和多副本机制,可以把 Kafka 作为长期的数据存储系统来使用,只需要把对应的数据保留策略设置为“永久”或启用主题的日志压缩功能即可。

    (3)流式处理平台:提供了一个完整的流式处理类库,比如窗口、连接、变换和聚合等各类操作。

    使用场景 —— 系统解构、日志收集、运营指标监控、实时数仓、ETL等;

    2.kafka的总体架构

    简单架构如下:

    简单架构

    详细解构如下:

    详细架构

    以日志系统为例,说明kafka架构:

    1.Producer:消息生产者,向kafka broker发消息的客户端。

    生产者

    2.Consumer:消息消费者,从kafka broker取消息的客户端。

    消费者

    3.Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个 topic。

    4.Topic:可以理解为一个队列,一个 Topic 又分为一个或多个分区。

    topic

    5.Partition:一个topic 可以分布到多个 broker上,每个 partition 是一个有序的队列。partition 中的每条消息都会被分配一个有序的id(offset)。将消息发给 consumer,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个 partition 间)的顺序。

    partition

    6.Offset:kafka 的存储文件都是按照 offset.kafka 来命名,用 offset 做名字的好处是方便查找。

    7.Consumer Group:实现一个topic消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个 Consumer Group。

    8.Replica 副本:Kafka 中的 Partition 为了保证数据安全,每个Partition可以设置多个副本。下图是对分区 0,1,2 分别设置 3 个副本。

    副本

    相关文章

      网友评论

          本文标题:【Kafka系列】1.1 总览 - 分布式消息中间件

          本文链接:https://www.haomeiwen.com/subject/nbpqrktx.html