您的位置:首页 > 其它

分布式消息队列研究及实践

2016-12-13 18:22 211 查看
一、Kafka的背景介绍
 1、kafka的三个应用业务场景

   1)它能够实现发布订阅的流式数据处理.从这方面来看,它类似于流式队列或者企业消息系统.

   2)它能够以容错的形式存储消息流.

   3)它能够按照先后顺序处理流式消息.

2、它最大的优势:

  1)它能够在系统和程序之间建立实时的流式处理管道;

  2)它能够实时的转换和处理流式数据.

3、为了认识Kafaka,首先我们需要了解一些基本的概念:

   1)Kafka以集群的方式存储于一台或者几台服务器上

   2)Kafka以topic的形式存储流式记录集

   3)每个记录集包括键、值和时间戳。

4、Kafka的核心接口包括:

   1)生产者API:负责发布流式记录到多个主题集。

   2)消费者API:负责应用程序订阅一个或者几个主题集。

   3)流式处理API:负责消费一个输入流和产生一个输出流。

   4)链接API:负责链接主题集到应用程序或数据集。

二、Kafa的基本数据模型

   1、主题集和日志集

        主题是一个发布数据集的类型或者原料,它通常有多个订阅者。每个Topic有多个订阅者,一个或者多个消费者去订阅。对于每个主题,Kafka维持一个如下的主题:



每个区域中的日志都是按照顺序进行添加,分区中的记录被赋予一个顺序ID。Kafka集群存储所有的发布记录(只要当前记录在维护期内,无论是否被消费)。例如,维护周期设置为2天。主题发布后两天将会被清楚,无论是否被消费。Kafka的数据大小不会影响其性能,因此长期存放不是一个问题。

事实上,在消费者日志中的元数据存储主题的偏离或者位置。这个偏移量被消费者掌控,因此消费者可以按照任意顺序进行。一般来讲,消费者按照时间的线性顺序读取记录。利用这一点,kafka可以实现处理以前的数据、最近的数据或者从现在之前的历史数据。

消费者可以实现最轻量化的影响,即消费者的添加或者删除不会影响其他消费者或Kafka集群。

以区域形式的划分日志有以下几个意图:首先,可以实现集群的缩放。例如,一个在多个区域上的topic可以实现集群的存储和处理。

另外,可以实现并发的单元。

2、分布式

分布式的日志存储于分布式服务器上,每个服务器能够实现数据的分布式和查询链接的分布式。每个区域按照配置文件存储区多个服务器上实现数据的容错机制。

每个区域的存储服务器中包含一个“leader”和多个“follower”。根据这种机制实现数据的同步存储和回复。

3、生产者

每个生产者发布数据到不同的主题。生产者负责将消息发送到不同的分区。他通过round-robin 算法进行负载均衡。

4、消费者

消费者通过组进行区分,消费者可以消费订阅的主题。如果消费者群组订阅相同的主题,则可以通过负载均衡算法进行获取消息。

具体的消费架构图如下:



5、承诺

1)生产者发送的消息追加到消息日志之后;

2)消费者消费消息按照日志的记录顺序进行消费;

3)复制N次的主题,可以实现N-1次的容错。

6、消息处理

消息处理模式分为两种:队列和发布订阅。队列模式可以实现并发消息处理。发布订阅模式以通知的形式进行处理。根据不同的应用场景,选择不同的形式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: