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”的分区,因此集群中的负载均衡很好。

 

 

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐