消息中间件--Kafka原理介绍

Kafka是消息分布式订阅-发布系统。应用场景:在线应用(消息)和离线应用(数据文件,日志)。

首先让我们回顾下几个基本的消息术语 
     - kafka 维护的类别称为主题的消息源。 
     - 我们调用生产者处理发布消息到kafka 主题。 
     - 我们调用消费者处理订阅的主题,处理发布的主题的消息源。 
     - kafka 运行在一个或者多个称为broker的服务的集群。

      因此,在一个较高的水平,当生产者通过网络发送消息到kafka集群后,相关订阅消息的消费者会处理消息。 
如图所示: 
这里写图片描述

     客户端和服务器之间的通信是通过一个简单的、高性能、语言无关的TCP协议。我们提供一个kafka的java客户端,但也支持各种其他语言客户端的支持。

 

话题 & 日志 (Topics and Logs)

      让我们首先深入kafka的高级抽象提供了主题。 
发布的消息是通过一个主题,这个主题是一个类别或订阅名称。

对于每一个话题,kafka集群维护一个分区日志,如下所示: 
这里写图片描述

 (1) 每个分区是一个命令,不变的序列的消息,可不断追加对客户提交日志。

 (2)分区中的消息都分配一个连续的id号叫做offset,惟一地标识每个消息内的分区

 (3)kafka集群保留所有发布的消息,不管他们是否已经消费了,在一个可配置的一段时间。

           例如,如果日志保留设置为两天,然后两天后发布消息可以消费,之后,它将被丢弃,节约空间。

(4)kafka的性能是有效常 数对数据大小,所以保留大量的数据并不是一个问题。

(5)事实上,唯一的元数据在每个消费者的基础上,是保留的位置消费日志中,称为“offset”。

        offset 是由消费者控制:正常一个消费者将会推进offset作为线性读取消息,但事实上,这个位置信息由消费者控制的,并能按照任何顺序消息消息的。 
         例如,一个消费者可以重置到之前的offset来重新处理消息

          这种组合的特性意味着kafka消费者非常轻量&方便,不管怎么来消费消息对集群或其他消费者的影响。 
          例如,你可以使用命令行终端工具去 tail 任何topic的内容,而不改变任何消费者消费的topic。

日志中的分区为多个目的:
         首先,它们允许日志规模超出一个大小适合在一台服务器上。每个分区必须适合在服务器主机上,但一个主题可能有多个分区,这样它可以处理任意数量的数据。 
          其次,他们充当并行化的单元。

分布式(Distribution)

在服务器日志的分区分布kafka集群中的每个服务器处理数据和请求的分区。 
(1)每个分区是可复制的,在一个可配置的容错服务器数量。 
(2)每个分区有一个服务器充当”leader”,大于0个服务器充当”followers”。 
(3)“leader”处理分区所有的读和写请求,然而 “followers”积极的复制”leader”的数据。如果 “leader”失败了,”followers”中某一个follower将会充当新的”leader”角色。每个服务器充当一个”leader”的分区和”follower”的分区,因此集群中的负载均衡很好。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值