Apache Kafka 介绍

流平台三个重要功能

1.  发布和订阅流,在这方面它类似消息队列或企业级的消息系统
2.  容错的方式存储流
3. 处理流

kafka的优势有哪些

它主要应用在以下两大类:

 1.  构建实时的流数据管道,在应用与系统之间获取流数据。
 2.  构建实时的流应用程序,对数据流进行转换或相应。

为了了解kafka是如何做这些事的,我们自下而上深入探究kafka的能力。

首先几个概念

kafka作为一个集群运行在一个或多个服务上。
kafka集群将流按照主题topics分类存储,每一个记录包含一个key,一个value和一个时间戳。(以下我们称为消息)

四个核心的API:

Product API允许应用程序,发布消息到一个或多个主题上。
Consume API允许应用程序,订阅一个或多个主题的消息,并处理生成的记录流。
Streams API允许应用程序,充当流处理器,接收从一个或多个主题接的输入流,输出一个或多个主题的输出流,有效地将输入流转换为输出流。
Connector API允许构建和运行可重复使用的生产者或消费者,将消息主题连接到应用或数据系统中。

例如:关系型数据库的连接,可获取表的所有更改。
这里写图片描述

kafka的客户端与服务端通讯使用的是简单的、高性能、语言无关的TCP协议,TCP协议版本向后兼容。官网提供了kafka Java版的客户端,也提供其他语言的客户端。

Topics and Logs主题和日志

首先介绍一下主题:一个主题就是一种类别的消息。Kafka中主题总是多用户使用的,也就是说一个主题可以有0个、一个或者多个的使用着。
对于每个主题,Kafka维护一个分区日志,如下图所示:
这里写图片描述

每个分区都是有顺序的,不可变的队列,并不断追加到结构化的提交日志中。每个分区的记录都被分配一个顺序的id号,称为唯一标示分区内记录的偏移量。
Kafka集群保留了所有已发布的记录,不管消息有没有被消费,使用可配置的保留期限。例如,如果保留策略设置为两天,则在发布消息的两天内,可被消费,之后将被销毁释放空间。Kafka的性能是和数据量无关的常量级,所以保留太多的数据并不是问题。
这里写图片描述

事实上,消费者的元数据就是日志中的偏移量。这个偏移由消费者控制:通常消费者在读取记录时,偏移量线性地提高,由于位置由消费者控制,它可以以任意顺序消耗记录。这样,消费者就可以重置更老的偏移量去重复读取旧数据,或者是跳过最近的记录,读取更新的记录。
这种特征说明,kafka的消费者很轻量级很灵活,有无消费者对集群来说没有影响。可以使用命令行工具“tail”任何主题的消息,不会对其他正在消费消息的消费者造成影响。

日志分区有几个目的。首先,它允许日志空间扩展到适合单个服务器的大小,每个单独的分区必须适合托管它的服务器,但主题可以有多个分区,因此它可以处理任意数量的数据。第二,他们作为并行计算的单位,

Distribution分布式

日志的分区分布在kafka集群中的服务器上,每个服务处理它所分到的分区上的数据。分区可以通过配置,复制到其他服务器上,以实现容错。
每个分区都有一个服务器充当“leader”领导者,零个或多个服务器充当“followers”被领导者。领导者处理分区的所有读取与写入请求,被领导者被动地复制领导者。如果充当领导者的服务器宕机了,从被领导者的集群中,挑选一位担任新的领导者。每个服务作为某些分区的领导者,其他服务被追随,实现集群中的负载平衡。

Producers生产者

生产者将数据发布到他们制定的主题,生产者负责选择主题中的哪个分区。这可以通过循环方式简单地平衡负载,也可以通过语义分区功能(在记录中标记关键字)。

Consumers消费者

消费者用群组名称标记,发布到主题的每个记录会被订阅了这一主题的群组中的所有成员接收到。消费者实例可以在单独的进程或者单独的机器上运行。
如果所有的消费者在一个组,这样记录均衡的分配到组内的消费者上。
如果所有的消费者在不同的组,记录会广播到所有的消费者上。

两个Kafka服务管理四个分区(P0-P3)两个消费集群,A中有两个消费者,B中有四个消费者。
然而我们发现,主题的消费者群体数量少,群组中的每一个消费者都是“逻辑订阅者”,每个群组有多个消费者组成,目的是未了扩展和容错。与发布/订阅模式相比,订阅者消费者的群组,而不是单一的进程。
Kafka的消费方式是:将日志分区划分到消费者实例上,以便每个消费者实例都在任何时间点“公平共享”某个分区。组内关系是根据Kafka协议动态维护的。如果新的成员加入到群组,新成员会从组内其他成员那接管一些分区,如果成员消失,分区将会分发给组内的其他实例。
Kafka仅保证分区内的记录时有序的,同一主题其他分区的顺序不能保证。每个分区排序结合通过key分配数据的能力足以满足大多数应用程序的需求。然而,若想要所有数据是有序的,可以设置主题只有一个分区,同时也就意味着每个群组只有一个消费者实例。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值