消息中间件--Kafka原理介绍
Kafka是消息分布式订阅-发布系统。应用场景:在线应用(消息)和离线应用(数据文件,日志)。首先让我们回顾下几个基本的消息术语 - kafka 维护的类别称为主题的消息源。 - 我们调用生产者处理发布消息到kafka 主题。 - 我们调用消费者处理订阅的主题,处理发布的主题的消息源。 - kafka 运行在一个或者多个称为broker的服务的集...
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”的分区,因此集群中的负载均衡很好。
更多推荐
所有评论(0)