澳门在线威尼斯官方 > 电脑操作 > 基本术语与概念

原标题:基本术语与概念

浏览次数:93 时间:2020-01-01

  • **日志聚合** 日志搜集通常从服务器收集物理日志文件,并将它们集中放置(可能是文件服务器或HDFS)以便后续处理。kafka抽象出文件的细节,并将日志或事件数据作为消息流清晰地抽象出来。这可以为更低处理延迟提供支持,多数据源和分布式数据消费更容易支持。与以日志为中心的系统(如Scribe或Flume)相比,Kafka性能同样出色,由于副本机制确保了更强的耐用性保,并且端到端延迟更低。
  • **监控测量** kafka经常用于运行监控数据。这涉及汇总分布式应用程序的统计数据,以产生操作运营数据的汇总数据。
  • **网站行为跟踪** Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘
  • **流处理** spark streaming和storm。保存收集流数据,以提供之后对接的Storm或其他流式计算框架进行处理。很多用户会将那些从原始 topic 来的数据进行阶段性处理,汇总,扩充或者以其他的方式转换到新的 topic 下再继续后面的处理。例如一个文章推荐的处理流程,可能是先从RSS数据源中抓取文章的内容,然后将其丢入一个叫做“文章”的topic中;后续操作可能是需要对这个内容进行清理,比如回复正常数据或者删除重复数据,最后再将内容匹配的结果返还给用户。这就在一个独立的topic之外,产生了一系列的实时数据处理的流程。Strom和Samza是非常著名的实现这种类型数据转换的框架。
  • **事件源** 事件源是一种应用程序设计的方式,该方式的状态转移被记录为按时间顺序排序的记录序列。Kafka可以存储大量的日志数据,这使得它成为一个对这种方式的应用来说绝佳的后台。比如动态汇总(News feed)。 - **提交日志** Kafka可以为一种外部的持久性日志的分布式系统提供服务。这种日志可以在节点间备份数据,并为故障节点数据回复提供一种重新同步的机制。具体来讲,我们可以将数据库的更新发布到 Kafka 上,应用程序通过监控事件流来接收数据库的实时更新。这种变更日志也可以用于把数据库的更新复制到远程系统上,或者合并多个应用程序的更新到一个单独的数据库视图上。数据持久化为变更日志提供了缓冲区,如果消费者应用程序发生故障,可以通过重放这些日志来恢复系统状态。 ## 3. Kafka 的结构与基本概念 ### 3.1 Kafka 的拓扑结构

Kafka的原理

  • 在Kafka中,发送消息者称为Producer,而消息拉取者称为Consumer ,通常consumer是被定义在Consumer Group里
  • Kafka通过Zookeeper管理集群
![](https://upload-images.jianshu.io/upload_images/1696405-81abccf6e1f3868f.png)
  • Kafka集群由多个实例组成,每个节点称为Broker,对消息保存时根 据Topic进行归类
  • 一个Topic可以被划分为多个Partition
  • 每个Partition可以有多个副本
![](https://upload-images.jianshu.io/upload_images/1696405-83e07ac4cbdb52e0.png)
  • Partition内顺序存储,写入新消息采用追加的方式,消费消息采用 FIFO的方式顺序拉取消息
  • 一个Topic可以有多个分区,Kafka只保证同一个分区内有序,不保 证Topic整体(多个分区之间)有序
![](https://upload-images.jianshu.io/upload_images/1696405-328808b491f1f15f.png)
  • Consumer Group(CG),为了加快读取速度,多个consumer可以划 分为一个组,并行消费一个Topic
  • 一个Topic可以由多个CG订阅,多个CG之间是平等的,同一个CG 内可以有一个或多个consumer,同一个CG内的consumer之间是竞争 关系,一个消息在一个CG内的只能被一个consumer消费
![](https://upload-images.jianshu.io/upload_images/1696405-e9d1353737335de6.png)

## 1. Kafka 简介 Kafka是一种分布式的,基于发布/订阅的消息系统,起源于 LinkedIn,用作 LinkedIn 的活动流和运营数据处理管道的基础。它有以下一些性能特性: - 能够以 O(1) 的时间复杂度提供消息持久化能力,即使对 TB 级以上的数据也能保证常熟时间复杂度的访问性能; - 高吞吐量,即使在非常廉价的商用机器上也能做到单机支持每秒 100k 条以上消息的传输; - 支持 kafka Server 间的消息分区及分布式消费,同时能保证每个 partition 内的消息顺序传输; - 支持离线数据处理和实时数据处理; - Scale out : 支持在线水平扩展; ##

kafka高可用实现

  • 多分区副本
    一个topic可以有多个分区,每个分区可以有多个副本
    一个分区的多个副本选举一个leader,由leader负责读写,其他副
    本作为follower从leader同步消息
    同一个partition的不同副本分布到不同的broker

  • kafka controller 选举
    从集群中的broker选举出一个Broker作为Controller控制节点
    负责整个集群的管理,如Broker管理、Topic管理、Partition
    Leader选举等
    选举过程通过向Zookeeper创建临时znode实现,为被选中的
    Broker监听Controller的znode,等待下次选举

  • kafka partition Leader选举

    • Controller负责分区Leader选举
    • ISR列表
      • Follower批量从Leader拖取数据
      • Leader跟踪其 保持同步flower列表ISR( In Sync Replica),ISR作为下次选主的候选列表
      • Follower心跳超时或者消息落后太多,将被移除出ISR
        Leader失败后,从ISR列表中选择一个Follower作为新的Leader

总结:
一个broker对应多个topic,一个topic对应多个分区,一个topic可以被多个consumer group消费,但只能被同一个consumer group 中的一个consumer消费.
每个partition有多个replication,每个partition有一个Leader.
分区内有序,整体无序.

  • **Segment** kafka 还将 partition 进一步分割成多个段(segment),一个段对应一个服务器上的log文件。这样分割好处之一就是在清理过期的消息时,可以对整个段的文件作删除操作,从而避免对文件的随机写操作,提高吞吐量。 ### 3.2 Topic、Partition、Segment 的关系 Kafka 中的消息是以 topic 来进行分类的,一个 topic 又被分成多个 partition,而 partition 还可以被进一步细分为若干个 segment。那么这三者具体的呈现是什么呢?下面是这三者之间的一个示意图: 图片 1 图片 2
  • **Topic** Topic是一个消息投递目标的名称,它是一个逻辑上的概念。生产者通过 topic 向 broker 发送消息,消费者通过订阅相应的 topic, 读取特定一类的消息。 - **Partition** Partition 是 topic 的物理层面上的具体分组,每个 partition 为一个目录,其命名规范为 topicName + 有序序号,序号从 0 开始。每个 partition 都是一个顺序的、不可变的消息队列,每发布到该 partition 一条消息就追加到其 log 文件的尾部。并且,partition 中的每条消息都被分了一个序列号,这个序列号称之为偏移量(offset)。offset 是一个 long 型的数字,它唯一标记一条消息。消费者通过控制 offset 来定位读取 partition 中所要消息。 Kafka 将 topic 拆分成多个 partition 主要有两个目的: - 支持水平扩展,可以将不同的 partition 放在不同的服务器上,这样的话,消息文件的体积将不再受限于单个服务器的磁盘容量,一个topic可以处理任意数量的数据。
  • partition 可以作为并行单元,使得消息可以被多个 comsumer 并行处理(只要将comsumer分布于不同的 group),可以系统效率。 - **Segment** Segment 是对 partition 的进一步细分,它物理上对应到 partition 目录下的具体 log 文件,以 19 位数字命名规则为:第一个 segment 命名为全0,后续的 segment 文件名为最后一条消息的 offset 值(位数不足左补0)。每个 segment 文件最大存储量是固定的,可以在配置文件中进行配置。当一个 segment 文件超出设定最大存储量时,就会创建下一个 segment 文件来存放下一条消息。每个 segment 由两部分组成: 消息数据文件(.log) 和 索引(.index) 。将 partition 分割成多个 segment 文件可以很方便的清理过期的消息(直接删除过期的segment文件,而不用再去随机写磁盘上的log文件)。 ### 3.3 Comsumer 与 Comsumer Group 传统的消息有两种模式:队列和发布订阅。 - **队列模式**:消费者池从服务器读取消息(每个消息只被其中一个读取)。
  • **发布-订阅模式**:消息广播给所有的消费者。 这两种模式都有优缺点,队列的优点是允许多个消费者瓜分处理数据,这样可以扩展处理。但是,队列不像多个订阅者,一旦消息者进程读取后故障了,那么消息就丢了。而发布和订阅允许你广播数据到多个消费者,由于每个订阅者都订阅了消息,所以没办法缩放处理。 kafka 将这两者做了结合与抽象,提出了**消费者组(Comsumer Group)**的概念。每个 comsumer 都有一个自己的消费者组名标识,因此多个相同标识的 comsumer 就组成了一个 comsumer group。一个 partition 和一个消费组中一个消费者绑定(保证partition 内消息的有序性),每一条该 partition 上消息是被投递到订阅了该 topic 的 comsumer group 上,交由组内的这个 comsumer 实例进行消费。当所有的 comsumer 都在同一个 group中时,这就变成了”队列模式“,而当每个 comsumer group 中都只有一个 comsumer 时,这就又变成了”发布-订阅模式“。实际上, kafka 这种消费者组的模式仍然属于发布-订阅模式范畴,只是订阅者由单个的消费者实例变成了消费者组。 Kafka的设计理念之一就是同时提供离线处理和实时处理,而 comsumer group 的这种设计就能够满足这种特性,为消息的多元化处理提供了支持。它既能够提供以分区为粒度的并行能力,同时又能保证消息在分区内的有序性。比如,我们可以使用Storm这种实时流处理系统对消息进行实时在线处理,同时使用Hadoop这种批处理系统进行离线处理,还可以同时将数据实时备份到另一 个数据中心,只需要保证这三个操作所使用的consumer在不同的consumer group即可。

KAFKA简介

  • Kafka由Linkedin开发的消息队列,使用Scala语言编写
  • 分布式、多分区、多副本、基于发布/订阅的消息系统
  • Kafka设计的初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息,并能够支撑较大的数据量,且具备良好的容错能力

如下图所示,为一个典型的kafka集群

KAFKA介绍:
https://www.cnblogs.com/seaspring/p/6138080.html

  1. Kafka 的应用场景 - **消息队列** kafka 可以用作消息中间件来代替传统的消息系统。Kafka能提供较高的吞吐量,较低的端到端延迟,多副本,容错功能以及强大的持久性保证。

偏移量索引文件

  • 以偏移量作为名称,index为后缀
  • 索引内容格式:offset,position
  • 采用稀疏存储方式
  • 通过log.index.interval.bytes设置索引跨度
![](https://upload-images.jianshu.io/upload_images/1696405-e7263fc7254b69aa.png)

图片 3 一个kafka集群包含以下几个部分: - 若干生产者 Producer - 若干用来存放消息的kafka服务器 Broker - 若干消费者群组 Consumer Group,Consumer Group中由一个或多个 Consumer 组成 - 管理集群配置的 zookeeper 整个kafka集群工作模式为:Producer 使用 push 模式将消息发布到 broker,comsumer 使用 pull 模式从 broker 订阅并消费消息,整个集群基于 zookeeper 来进行集群管理,负载均衡等。这里面涉及到这样一些术语: - **Broker** kafka 集群包含一个或多个服务器,每个独立的 kafka 服务器被称为 broker。对于生产者,broker 接收来自生产者的消息,为消息设置 offset,并提交消息到磁盘保存。对于消费者,broker 为消费者读取分区的请求作出响应,返回分区上的消息。 - **Producer** 负责发布消息到 broker 上的对象。 - **Comsumer** 消息消费者,从 broker 上订阅消息并处理这些消息 。 - **Comsumer Group** 若干 Comsumer 组成的一个消费者集合,与传统的发布-订阅消息系统不同,kafka 是将消息广播到各个 Comsumer Group 上,而不是单个的 Comsumer 上。 - **Topic** kafka 为消息做的逻辑归类,一个消息类别就是一个 topic。可以认为 topic 是一个逻辑上 queue,每条消息都必须制定它的 topic,生产者与消费者也要通过 topic name 来 push 或者 pull 消息。 - **Partition** topic 是一个逻辑上的抽象概念,它具体是由 partition 作物理呈现。一个 topic 被分成多个 partition 存放在不同的服务器上,一个 partition 在服务器上对应的是一个具体的文件目录,目录下存放的是消息文件和索引文件。

Kafka的存储

  • 每个partition的副本是一个目录
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:07 topicnewtest1-0
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:07 topicnewtest1-2
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:08 topicnewtest1-3
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:08 topicnewtest1-4
[hadoop@hadoop4 kafka-logs]$ tree topicnewtest1-0
topicnewtest1-0
├── 00000000000000000000.index
├── 00000000000000000000.log
└── 00000000000000000000.timeindex
  • Segment:段文件,kafka中最小数据存储单位,一个partition包含多 个segment文件,每个segment以message在partition中的起始偏移量 命名以log结尾的文件
  • Offset:消息在分区中的偏移量,用来在分区中唯一的标识这个消 息
![](https://upload-images.jianshu.io/upload_images/1696405-999c06a12333426e.png)



图中的文件名是偏移量第一个文件记录了0--368768的数据,第二个记录了368769-737337的数据  
查看topic的信息可以发现:
[hadoop@hadoop4 kafka_2.11-0.10.2.1]$ bin/kafka-topics.sh --describe --zookeeper hadoop0:2181 --topic topicnewtest1
Topic:topicnewtest1 PartitionCount:5    ReplicationFactor:2 Configs:
    Topic: topicnewtest1    Partition: 0    Leader: 2   Replicas: 2,0   Isr: 2,0
    Topic: topicnewtest1    Partition: 1    Leader: 0   Replicas: 0,1   Isr: 1,0
    Topic: topicnewtest1    Partition: 2    Leader: 1   Replicas: 1,2   Isr: 2,1
    Topic: topicnewtest1    Partition: 3    Leader: 2   Replicas: 2,1   Isr: 2,1
    Topic: topicnewtest1    Partition: 4    Leader: 0   Replicas: 0,2   Isr: 2,0

topicnewtest1这个主题中,有五个partition,每个partition有2个replication,第0个partition的Leader是broker为2的节点,replication是在2,0,这两个节点 ISR 是2,和 0 节点.查看broker0 的节点log目录中,存在partition0 的副本:

[hadoop@hadoop2 kafka-logs]$ ll
total 28
-rw-rw-r--. 1 hadoop hadoop    4 Jan 31 10:07 cleaner-offset-checkpoint
-rw-rw-r--. 1 hadoop hadoop   54 Jan 31 09:32 meta.properties
-rw-rw-r--. 1 hadoop hadoop   58 Jan 31 11:44 recovery-point-offset-checkpoint
-rw-rw-r--. 1 hadoop hadoop   58 Jan 31 11:45 replication-offset-checkpoint
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-0
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-1
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-4
[hadoop@hadoop2 kafka-logs]$ pwd
/home/hadoop/apps/kafka_2.11-0.10.2.1/kafka-logs
[hadoop@hadoop2 kafka-logs]$

https://www.cnblogs.com/huxi2b/p/6050778.html

本文由澳门在线威尼斯官方发布于电脑操作,转载请注明出处:基本术语与概念

关键词:

上一篇:没有了

下一篇:适合所有菜鸟学习和老手回顾,很实用的Linux