kafka介绍 (2)

kafka介绍

如图,一个Kafka集群有2个服务器,4个分区(P0—P3),2个消费者分组。消费者分组A有2个消费者实例,组B有4个。

通常,我们会发现,topic有许多消费者分组,每个组都是一个"logical subscriber"(逻辑订阅者)。每个组由许多消费者实例组成,实例是可伸缩的可容错的。

Kafka只提供分区中的记录的总的顺序,而不保证分区之间的顺序。

Guarantees

一个高级别的kafka给出下列保证:

生产者发送到topic分区的消息是按照它们被发送的顺序追加的。因此,如果记录M1和M2都是被同一个生产者发送的,并且M1在前M2在后,那么M1在分区中的偏移量将比M2小,而且M1的日志也在M2的前面。

一个消费者实例看到记录的顺序是按照记录存储在日志中的顺序的

假设topic的副本因子是N,那么我们可以容忍N-1个服务失败,也不会丢失任何的提交日志

Kafka as a Messaging System

消息传统上有两种模型:queuing 和 publish-subscribe(点对点队列模型和发布订阅模型)。在队列模型中,每个消息只能被消费一次;在发布订阅模型中,消息可以广播给所有的消费者。这两种模型各有利弊。

Kafka中的消费者分组的概念就是在从这两种模型中衍生出来的。和队列模型一些,消费者分组允许你在处理集合之上分开处理。和发布订阅模型一样,kafka允许你广播消息给多个消费者分组。

Kafka的模型的优势在于它的每个topic有这样一些属性:它可以伸缩处理,而且它有多个订阅者

相对于传统的消息系统而言,Kakfa有更强的顺序保证。

传统的队列在服务器上按顺序保存记录,而且多个消费者从队列中消费记录是按照记录被存储的顺序来消费的。虽然服务器是按顺序处理记录的,但是记录是异步投递给消费者的,所以它们可能以不同的顺序到达消费者。也就是说,在并行消费的时候会丢失一定百分比的顺序。消息系统中一个概念叫"exclusive consumer"它允许只能有一个消费者来处理,也就意味着是串行处理。

Kafka做得更好。它有一个概念叫“parallelism—the partition—within the topics”(在topics的分区下的并行)。kafka既保证顺序同时还提供负载均衡。这一切都归功于给消费者分组中的消费者指定topic的分区,以至于每个分区都可以被一个消费者精确的消费。注意分组中的消费者数量不能比分区数还多。

Kafka as a Storage System

任何消息队列都允许发布消息和消费消息解耦,在这个过程中扮演一个存储系统的角色。写到kafka的数据被写到磁盘并且被复制。kafka允许生产者等待确认,以至于只有当数据被完全复制并且保证已经被持久化了才能认为这个写操作是完成的。

不管你是持久化50KB还是50TB的数据,kakfa执行的操作都是一样的。

你可以把kafka当做一种特别的分布式文件系统,它高性能、低延迟的提交日志存储、副本。

Kafka for Stream Processing

仅仅只是读写存储流数据是不够的,要能够实时处理流。

kafka的流处理器是从输入topic那里持续不断的接收流,然后对这些输入做一些处理,并且生成持续不断的流数据到输出topic。

例如,一个零售应用可能采集销售和物流的的数据作为输入流,然后基于这些数据进行计算,从而生成再次订购和价格调整的输出流。

参考  

本节重点

1、kafka是一个分布式的流平台

2、kafka有什么用?

构建实时的流数据管道

构建实时的流应用

3、基本概念

kafka是以集群方式运行的,集群可以是一台或者多台服务器

记录按照类别来存储,这些类别叫topics。可以简单的理解为,数据存储在topics中

每条记录由key、value、timestamp组成

4、核心API

Producer:生产者,发布记录(消息)到一个或多个topics中

Consumer:消费者,订阅一个或者多个topics

Streams:流处理器,从一个或多个topics那里消费输入流并且生成输出流到一个或多个topics

Connector:构建可以连接到外部的应用或者数据系统的可重用的生产者或消费者

5、主题和日志

  5.1、一个主题就是一个分类,记录被发布到某个主题中,主题总是有多个订阅者,一个主题可以有0个或1个或多个消费者

  5.2、每个主题都有一个分区日志。每个分区都是一个有序的、不可变的记录序列,记录被持续不断的追加到分区中

  5.3、记录是一个结构化的提交日志(a structured commit log)

  5.4、分区中的每条记录都被指定了一个唯一的id号,叫做offset。offset是由消费者控制的。

  5.5、kafka保存所有已发布的记录,不管它们是不是已经被消费。保留的周期是可配置的。

  5.6、为什么要分区呢?分区可以突破单台服务器的限制。

6、分布

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

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