Kafka 入门三问

当我在学习一个新技术的时候, 入门阶段, 基本上都遵循

是什么->为什么->怎么用

这样的原则。

1 Kafka 是什么? 1.1 背景

Kafka 最初是 LinkedIn 的一个内部基础设施系统, 后续捐赠给了 Apache, 目前是 Apache 的一个顶级项目。

1.2 定位

在官网中, 现定位是分布式流处理平台

可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似

可以储存流式的记录,并且有较好的容错性

可以在流式记录产生时就进行处理

它可以用于两大类别的应用:

构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)

构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)

OK, 暂时了解这些就够了。

1.3 产生的原因

Kafka 产生的原因, 与其他类似的系统产生的原因相似。

在日常的程序中, 我们除了需要处理业务逻辑之外, 还需要对我们的程序进行一些额外的工作, 举个两类:

业务系统和应用程序的性能监控指标数据。

用户操作行为数据。

刚开始, 类似此类情况我们可以让程序直接连接到度量显示度量指标的应用程序上, 通过此连接将相应的数据推送过去, 进行显示

基础监控

这是比较基础的方案。 后面, 随着需求的增长, 需要分析更长时间片段的度量指标, 原先的一个性能监控服务器满足不了需求, 我们又增加了一台性能监控服务器。 在后面, 我们又多了几个应用, 又陆续增加了很多监控相关的服务器。 后续由于各种原因, 又增加了很多服务器。

多数据监控

显得一团糟糕。 此时, 维护成本就增加了。 因此, 我们决定进行改进, 专门做一个应用程序进行采集, 并给其他系统进行查询。

简单的发布与订阅系统

此时, 一个发布与订阅的系统就建成了。

那这只是度量指标的一个系统, 公司还有其他的, 比如日志, 用户行为跟踪, 如果都使用相同的方式创建这些系统, 则系统就变成这样

多发布与订阅系统

随着公司规模的增长, 需要搭建类似的系统越来越多, 相应又需要付出很多维护成本。同时, 系统之间的无法实现交互。

很显然, 我们需要对这些系统进行大一统, 同时进行改进。

因此, Kafka 就诞生了。

Kafka 在设计之初的目标:

为生产者和消费者提供一套简单的 API。

降低网络传输和磁盘存储开销;

具有高伸缩架构

很显然, 这 3 点目标都做到了。

Kafka

1.4 Kafka 有哪些特征 消息和批次

消息: Kafka 的数据单元。 一条消息在 Kafka 中可以看出数据库中的一条记录。 消息由字节数组组成, 对应有一个键, 键是在消息以可控的方式写入到分区时需要用到的。

批次: 一组消息, 这些消息属于同一个主题和分析。 如果每个消息但单独传输, 会大致大量的网络开销, 分批次传输可以降低。 但批次越大, 对应单位时间内需要处理的消息越多, 单个消息的传输时间越长。

模式

消息在 Kafka 中以字节数组存储, 因此, 如果我们以额外的结构来定义这些消息, 就可以让消息更好的被理解。

如 JSON, XML, 大家都很熟悉, 用起来也不错。 但在 Kafka 中推荐使用 Apache Avro, 是 Hadoop 的一款序列化的框架。

主题和分区

Kafka 的消息通过主题进行分类。 主题就好比数据库的表, 或者系统文件中的文件夹。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppdgx.html