项目中为什么通常flume和kafka要共同使用?

By | 2018年12月31日

版权声明:本文为博主原创文章,未经允许不得转载! https://blog.csdn.net/weixin_41919236/article/details/84522423

Introduction(介绍)
Apache Kafka® 是一个分布式流平台,这到底是什么意思呢?

我们认为流平台应该具备3个关键作用:

1、发布订阅。(注意:发布和订阅应该分开)从这方面来看可以理解成为类似与消息队列之类的东西。

2、容错。Kafka是高容错的

3、offset,->记录已经处理过的数据。

Kafka的优点?

它被应用在两个广泛的应用领域中:
1、实时数据流管道
2、实时数据流的转换
说到底主要还是来做数据实时采集的
在这里插入图片描述

让我们从底层来了解kafka是怎么来工作的吧。
首先简单介绍一下:
Kafka 可以跑在集群上的一个节点或多个节点上。 Kafka的数据是存在topic上面的 。 每条记录包含 key, value, timestamp.

Kafka有四种核心APIs:

  • Producer API
  • Consumer API
  • Streams API 允许Kafak充当流处理器。消费一个或者多个topic中的数据,输出到一个或多个topic中。
  • Connector API 和现有的应用程序或者数据系统链接,比如DB,可以获取到DB 中表的每次改动。

在卡夫卡中,客户端和服务器之间的通信是用一个简单的、高性能的、语言无关的TCP协议完成的。该协议是版本控制的,并且与旧版本保持向后兼容。我们为卡夫卡提供了一个Java客户端,但是客户端可以使用多种语言。

Topics and Logs

首先我们先来深入了解kafka中的topic。

Topic的字面意思是主题。可以理解成DB中的一张表。Topic都可以多订阅。也就说可以有一个或多个消费者来消费该topic
对于每个Topic,它会有如下图所示的日志分区文件:

在这里插入图片描述

每个分区是有序的,并且被不断追加的。每条数据都有一个顺序的id,该id被称作offset,也就是偏移量。
afka 集群保存所有数据,除非该数据超过了配置信息中的保存期限。 比如,如果在配置文件中配置的过期时间是2天,那么数据在进入kafka之后的两天内是可以被消费的,超过两天后这些数据将会被删除已释放空间。但是长期保留数据对于kafka来说影响不大。

事实上,元数据这边主要保存的就是offset。Offset是由每个消费者自己控制的,所以消费者可以按照自己的喜好来消费这些数据。就比如说:消费者可以每次启动从头开始消费,可以设定某个offset重复消费某些数据,也可以跳过一下数据从最新的offset开始消费,比如:“now”。
这种特性的组合带来的好处是什么?那就是独立性,消费者的独立性。比如,消费者A随意的消费topic内的数据而不用担心它是否会影响到消费者B 的消费。
有分区的原因:第一、一个patition会有多个分区,每个分区都是互相独立的,他们的offset不会有任何羁绊,所以可以很大程度上的多并发。第二、作为存储数据的最小单位,并且是并行的它们会做的比这个更多。

Distribution分布式

在kafka中,分区是有副本概念的。副本按照一定的算法分布在不同的节点上。

每个分区都会产生一个leader,该leader会有一些follower,follower除了提供容错之外,还会充当之后的leader选举。也就是说当leader挂了之后,这些follower会通过选举机制完成新leader的选举。所以说,kafka是高容错、负载均衡的。
Producers生产者

Producers 没啥好说的。

Consumers消费者

Consumers 会有消费者组的概念,消费者组不需要提前定义。而是在使用消费者时随意制定消费者组,比如消费者A 可以指定为消费者组x。x 之前是不存在的。
同消费组中的消费者共享topic中的数据,不同消费者组之间是独立的。如下图所示:

上图是两个kafka节点,一个topic有四个分区p0-p3。我们发现,该topic有两个消费者组,CGA和CGB。CGA 中有两个消费者,根据动态算法自动负载均衡的消费分区数据。我们注意到,同一个分区在统一时间只能被一个消费者消费;而两个消费组之间并没有产生羁绊。
对于CGA,如果C1当掉,那么p0,p3将会被C2接管。如果C 1又重新启动,那么P0和p3会重新分配到C1上。然而对于CGB,如果再添加消费者挥发什么什么事情呢?
Guarantees保证

对于 Kafka 的高保证会有以下几点:

  • 1、消息写入topic上的顺序会有保证,M1比M2早,那么M1的offset绝对比M2的小。
  • 2、consumer 维护着自己的offset
  • 3、可以容忍N-1个节点宕机。N是分区的副本数。
    Kafka as a Messaging System作为消息系统
    Kafka as a Storage System作为存储系统
    Kafka for Stream Processing作为流处理器
    Putting the Pieces Together碎片管理

发表评论