kafka 学习笔记 1 - 简述

2020-04-15  本文已影响0人  张云飞Vir

0. 背景

本文简述 kafka 的相关内容。

kafka

1. 简介

Kafka 是一种高吞吐量的分布式发布订阅消息系统。

有如下特性:

官方口号:

Kafka 用于构建实时的数据管道和流式的app。它可以水平扩展,高可用,速度快,并且已经运行在数千家公司的生产环境。

简单理解就是:

藉由消息队列和流的特性,Kafka适合什么样的应用场景?

Kafka 适用的场景:

流式应用特性就是流处理,通过kafka stream topic和topic之间内部转换。简单理解就是:

生产者 >--输入流-->  | Kafka流应用(处理输入流,写到输出流) | >--输出流--->  消费者

主要能力:

后面我们会介绍这三种能力对应的场景,现在让我们了解一些基本概念。

2. 基本概念

一些概念:

Kafka有四个核心的API:

Topics 和 记录集

Topic(主题)
流式的记录集是kafka的核心概念, 即 topic。

Topic 就是 主题,是 数据记录集 发布的地方, 可以用来区分业务系统。

Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。

分区(Partition)
对于每一个topic, Kafka集群都会维持一个分区(Partition),如下所示:

topic 和 分区

追加到文件
每个分区都是有序且顺序不可变的记录集,并且不断地追加到结构化的记录文件中。

偏移量(offset)
分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offset,offset用来唯一的标识分区中每一条记录。

存活期限 (retention period)
Kafka 集群保留所有发布的记录(无论他们是否已被消费),并通过一个可配置的存活期限来控制.。比如, 如果存活策略设置为2天,一条记录发布后2天内,可以随时被消费,两天过后这条记录会被抛弃并释放磁盘空间。

Kafka的性能和数据大小无关,所以长时间存储数据没有什么问题.

image.png

在每一个消费者中唯一保存的是offset(偏移量), 即消费到的记录偏移的位置。

偏移量由消费者所控制: 在读取记录后,消费者会以线性的方式增加偏移量。

实际上,由于这个位置由消费者控制,所以消费者可以采用任何顺序来消费记录。例如,一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以从"现在"开始消费。

这些细节说明Kafka 消费者是非常廉价的—消费者的增加和减少,对集群或者其他消费者没有多大的影响。

分布式

Partition(分区)有以下几个用途:

分区(partition)的特点:

分区的 leader 与 宕机后选举

生产者

生产者可以将数据发布到所选择的topic(主题)中。生产者负责将记录分配到topic的哪一个 分区中。

生产时负载均衡

消费者

消费者使用一个 消费组 名称来进行标识,发布到topic中的每条记录被分配给订阅消费组中的一个消费者实例.消费者实例可以分布在多个进程中或者多个机器上。

保证

high-level Kafka给予以下保证:

4. kafka 应用

kafka 可以作为 消息系统,存储系统,流处理,它和这些传统的系统相比,也有其自身的特性,下面逐一讨论。

4.1 Kafka作为消息系统

传统的消息系统
传统的消息系统有两个模块: 队列 和 发布-订阅。
(1)在队列中,消费者从消息队列读取消息记录,每条记录被一个消费者消费;
(2)在发布订阅中,记录被广播到所有的消费者。
两者均有优缺点:
(1) 队列的优点在于它允许你将处理数据的过程分给多个消费者实例,使你可以扩展处理过程。 缺点是:一旦一个进程读取了数据,数据就会被丢弃。
(2)而发布-订阅系统允许你广播数据到多个进程,但是无法进行扩展处理,因为每条消息都会发送给所有的订阅者。

消费组在Kafka有两层概念

Kafka的优势在于:每个topic都有可以扩展处理并且允许多订阅者模式(不只选其中一个).

Kafka 比传统消息队列有更严格的顺序保证

通过这样,我们能够确保消费者是该分区的唯一读者,并按顺序消费数据。 众多分区保证了多个消费者实例间的负载均衡。但请注意,消费者组中的消费者实例个数不能超过分区的数量。

4.2 Kafka作为存储系统

(1)写入,备份,确保继续写入
数据写入Kafka后被写到磁盘,并且进行备份以便容错。直到完全备份,Kafka才让生产者认为完成写入,即使写入失败Kafka也会确保继续写入。
(2)扩展性
Kafka使用磁盘结构,具有很好的扩展性—50kb和50TB的数据在server上表现一致。
(3)可以存储大量数据
可以存储大量数据,并且可通过客户端控制它读取数据的位置。

您可认为Kafka是一种高性能、低延迟、具备日志存储、备份和传播功能的分布式文件系统。

4.3 Kafka作为流处理

Kafka 流处理不仅仅用来读写和存储流式数据,它最终的目的是为了能够进行实时的流处理。

在Kafka中,“流处理器” 不断地从 “输入的topic” 获取流数据,处理数据后,再不断将“产生的流数据” 写入到 “输出的topic” 中去。

例如,零售应用程序可能会接收销售和出货的输入流,经过价格调整计算后,再输出一串流式数据。

简单的数据处理可以直接用生产者和消费者的API。对于复杂的数据变换,Kafka提供了Streams API。 Stream API 允许应用做一些复杂的处理,比如将流数据聚合或者join。

4.4 总结

一般来说,我们可能已经有了很多的历史数据,同时又要处理存储新来的数据,和准备持续处理未来的数据。

流式应用程序
通过低延迟订阅和组合存储,流式应用程序可以以同样的方式处理过去和未来的数据。 一个单一的应用程序可以处理历史记录的数据,并且可以持续不断地处理以后到达的数据,而不是在到达最后一条记录时结束进程。 这是一个广泛的流处理概念,其中包含批处理以及消息驱动应用程序。

低延迟
作为流数据管道,能够订阅实时事件使得Kafk具有非常低的延迟;
组合存储
同时Kafka还具有可靠存储数据的特性,可用来存储重要的支付数据, 或者与离线系统进行交互,系统可间歇性地加载数据,也可在停机维护后再次加载数据。

总结就是:“kafka 具有对数据批处理的能力”

5. 参考

官网
http://kafka.apache.org/
中文
http://kafka.apachecn.org/
https://www.cnblogs.com/qingyunzong/p/9004509.html
https://www.jianshu.com/p/430454d9e30b

上一篇 下一篇

猜你喜欢

热点阅读