记录我与kafka的一次邂逅_初识

故事就从什么是kafka开始,我从官方文档上面翻译了这句话:Apache Kafka是一个分布式的流处理平台。我们知道作为一个流处理平台,它拥有三个关键的功能:可以发布和订阅流;可以以容错的方式存储流;还可以实时的处理流。

kafka作为一个分布式的流处理平台,它有两大应用:一是能够构建实时流数据管道,在系统和应用之间可靠地获取数据;另一个应用是能够构建转换或响应数据流的实时流应用程序。kafka作为一个集群运行在一个或多个服务器上,这些服务器可以跨越多个数据中心,根据topic的不同来分类存储记录流;每个记录由key、value和timestamp组成。

如下图所示,kafka集群有五个核心的API;分别是生产者API、消费者API、流处理器、连接器、ADMIN API。下面对每个API做个简要介绍:

在这里插入图片描述

  • 生产者API: 允许应用程序发布记录流到一个或多个kafka主题
  • 消费者API:允许应用程序订阅一个或多个n主题,并处理这些主题接收到的记录流
  • Stream API:允许应用程序充当流处理器,从一个或多个主题获取输入流,并生产一个输出流到一个或多个主题,能够有效的转换输入流为输出流
  • Connector API:连接器API允许构建和运行可重用的生产者或消费者,将Kafka主题连接到现有的应用程序或数据系统。例如,连接到关系数据库的连接器可能捕获对表的每个更改。
  • Admin API:允许管理和检查主题、brokers和其它的kafka对象

kafka在客户端与服务端之间的通信是通过一个简单的、高性能的和语言无关的TCP协议完成的。

主题和分区

kafka通过主题进行分类,主题就好比数据库中的表,文件系统中的文件夹。一个主题可以被分为若干个分区,一个分区就是一个提交日志。消息是一个追加的方式写入分区,然后以先入先出的顺序读取。一个主题可以横跨多个服务器,因为kafka通过分区的方式来实现数据冗余和伸缩性,分区可以分布在不同的服务器上。通常会使用流来描述kafka这类系统的数据。把一个主题的数据看成一个流,不管它有多少个分区。流是一组从生产者移动到消费者的数据。

在这里插入图片描述

每个分区都是一个有序的、不可变的记录序列,它们被不断地附加到一个结构化的提交日志中。分区中的每个记录都被分配了一个称为偏移量的连续id号,它惟一地标识分区中的每个记录。

在这里插入图片描述

实际上,每个使用者保留的唯一元数据是该使用者在日志中的偏移量或位置。这个偏移量是由使用者控制的,通常使用者会在读取记录时线性地增加它的偏移量,但实际上,由于位置是由使用者控制的,所以它可以按自己喜欢的任何顺序消费记录。例如,使用者可以重置为较旧的偏移量,以重新处理过去的数据,或者直接跳到最近的记录,并从“现在”开始使用。

生产者和消费者

生产者创建消息。生产者默认情况下把消息均衡地分布到主题的所有分区上,而并不关心特定消息会被写到哪个分区。在特定的情况下,生产者也会讲消息写到指定的分区上,通过消息键和分区器来实现。

消费者读取消息。消费者订阅一个或多个主题,并按照消息生成的顺序读取它们。使用偏移量来区分已经读取过的消息。偏移量是一个不断递增的整数值,在特定的分区中偏移量是唯一的,每个分区的最后偏移量保存到zookeeper或kafka中。

消费者群组由一个或者多个消费者组成,同一个组中的消费者对于同一条消息只消费一次。某一个主题下的分区数,对于消费组来说,应该小于等于该主题下的分区数。分区数越多,同一时间可以有越多的消费组进行消费,消费数据的速度就会越快,提高消费的性能。

在这里插入图片描述

每个分区都有一个服务器来充当“leader”,由零个或多个服务器来充当“followers”。“leader”处理所有的阅读和请求,而“follower”被动的复制“leader”。如果“leader”

broker和集群

一个独立的kafka服务器被称为broker。broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消息。

broker是集群中的一部分,每个集群都有一个broker同时充当了集群控制器的角色。控制器负责管理工作,包括将分区分配给broker和监控broker。在集群中,一个分区从属于一个broker,该broker被称为分区的首领。

kafka默认的消息保留策略:要么保留一段时间,要么保留到消息达到一定大小的字节数。下图为kafka的整体架构图:

在这里插入图片描述

kafaka好处

说了这么多,那么kafka有什么好处呢?他的优点是什么呢?

首先kakfa无缝的支持多个生产者,它很适合用来从多个前端系统收集数据,并以统一的格式对外提供数据;除了支持多个生产者以外,它也支持多个消费者从一个单独的消息流上读取数据,而且消费者之间互不影响;另外,多个消费者还可以组成一个群组,群组里面的消费者共享一个消息流,并保证整个群组对每个给定的消息只处理一次。不仅如此,它还允许消费者非实时地读取消息;kakfa将消息提交到磁盘,并可以对不同主题设置规则进行保存,这样持久化保存数据消费者不会因为处理速度慢或者突发情况而导致的无法及时处理消息。

其次,kafka在一开始就被设计成一个灵活的可伸缩系统,它可以随着数据量不断增长而可以在线的扩展broker,集群拥有多个broker,即使个别broker出现问题,也可以保证能够持续的为客户提供服务;具有很好的可扩展性、容错性。当然通过横向扩展生产者、消费者和broker,使得kafka可以轻松处理巨大的消息流。

应用场景
光认识了还不行,kafka有哪些应用场景呢?下面总结了五个:

  1. 活动跟踪

    kafka最初的使用场景就是跟踪用户的活动。网站用户与前端应用程序发生交互,前端应用程序生成用户相关的消息;

  2. 传递消息

    应用程序向用户发送通知(比如邮件)就是通过传递消息来实现的。

  3. 度量指标和日志记录

    可以用于收集应用程序和系统度量指标以及日志

  4. 提交日志

    kafka的基本概念就来源于提交日志,所以使用kafka提交日志是顺利成章的事。

  5. 流处理

    流式处理框架(spark,storm,flink)从主题中读取数据,对其进行处理,并将处理后的数据写入新的主题,供用户和应用程序使用,kafka的强耐久性在流处理的上下文中也非常的有用。

好了,就先认识到这里吧!下一篇,我们讲讲它是怎么安装的。

参考资料

Neha Narkhede, Gwen Shapira ,Todd Palino(著) , 薛命灯 (译) . Kafka 权威指南 . 人民邮电出版社 . 2018.1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栖溪阁晓生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值