Kafka 入门三问 (2)

主题可以被分为若干分区, 一个分区就是一个提交日志。 通过分区, Kafka 可以实现数据的冗余和伸缩性。 同时, 分区可以在不同的服务器上, 达到一个主题跨越多个服务器。

分区

每个分区都是有序且顺序不可变的记录集,并且不断地追加到结构化的commit log文件。分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offset,offset用来唯一的标识分区中每一条记录。

在每一个消费者中唯一保存的元数据是offset(偏移量)即消费在log中的位置.偏移量由消费者所控制:通常在读取记录后,消费者会以线性的方式增加偏移量,但是实际上,由于这个位置由消费者控制,所以消费者可以采用任何顺序来消费记录

消费者offset

消息以追加的方式写入分区, 然后以先入先出的顺序读取。 由于分区的存在, 无法保证主题消息的顺序, 但可以保证单个分区的顺序。

生产者和消费者

Kafka 的客户端就是 Kafka 的系统用户, 可以被分成两类: 生产者和消费者。

生产者产生消息。 一般情况下, 一个消息会被发布到一个主题上。 在默认情况下, 生产者会把消息均衡的分布到主题的所有分区中, 不需要关心特定消息具体在哪个区。 但在某些情况下, 生产者会把消息直接写到指定的分区。 通常是通过分区器和键来实现的, 分区器为键生成一个散列, 并将其映射到指定的分区上。

消费者订阅消息。 消费者订阅一个或多个主题, 并按照消息生成的顺序读取它们。 消费者使用一个消费组 名称来进行标识,即会有一个或多个消费者共同读取一个主题。 群组用来保证每个分区只能被一个消费者使用(但一个消费者可以消费多个分区)。 消费者和分区的映射, 通常称之为所有权关系。

broker 和 集群

broker 是一个独立的 Kafka 服务器。 broker 接收来自生产者的消息, 为消息设置偏移量, 并提交到磁盘中保存。 broker 为消费者提供服务, 对读取扥去的请求作出响应, 返回磁盘上的消息。 单个 broker 可以轻松处理数千分区和每秒百万级的消息量。

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

1.4 Kafka 可以做什么 Kafka作为消息系统

Kafka 作为一款优秀的消息系统, 具有高吞吐量, 内置的分区, 备份冗余分布式等特点。

传统的消息队列:在队列中,消费者池从server读取数据,每条记录被池子中的一个消费者消费, 但队列队列不是多订阅者模式的—一旦一个进程读取了数据,数据就会被丢弃。

发布-订阅系统: 记录被广播到所有的消费者。 发布-订阅系统允许你广播数据到多个进程,但是无法进行扩展处理,因为每条消息都会发送给所有的订阅者

Kafka 消息队列, 在队列中,消费组允许你将处理过程分发给一系列进程(消费组中的成员)。 在发布订阅中,Kafka允许你将消息广播给多个消费组。

Kafka 作为存储系统

数据写入Kafka后被写到磁盘,并且进行备份以便容错。直到完全备份,Kafka才让生产者认为完成写入,即使写入失败Kafka也会确保继续写入

Kafka使用磁盘结构,具有很好的扩展性—50kb和50TB的数据在server上表现一致。

可以存储大量数据,并且可通过客户端控制它读取数据的位置,您可认为Kafka是一种高性能、低延迟、具备日志存储、备份和传播功能的分布式文件系统。

Kafka用做流处理

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

将 Kafka 已收集的数据提供给其他流式计算框架进行处理。

批处理

通过组合存储和低延迟订阅,流式应用程序可以以同样的方式处理过去和未来的数据。 一个单一的应用程序可以处理历史记录的数据,并且可以持续不断地处理以后到达的数据,而不是在到达最后一条记录时结束进程

2 为什么选择 Kafka 2.1 多个生产者

Kafka 支持多个生产者, 不管客户端在使用单个主题还是多个主题。

2.2 多个消费者

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

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