kafka --第一章:基础知识

Kafka 个高吞吐量、分布式的发布一订阅消息系统。据 Kafka 官方网站介绍,当前的 Kafka 己经定位为 个分布式流式处理平台( distributed earning platform ),它最初由 Linkedin 公司开发,后来成为 Apache 项目的一部分。 Kafka 核心模块使用 Scala 语言开发,支持多语言 (如 Java IC++ rthon Go Erlang Node.js 等)客户端,它以可水平扩展和具有高吞吐量等

特性而被广泛使用 目前越来越多的开源分布式处理系统(如 Flume Apache Storm Spark Flink 等)支持与 Kafka 集成。

Kafka 是一款开源的、轻量级的 、分布式、可分区和具有复制备份的 Replicated )、基于 Zoo Keeper 协调管理的分布式流平台的功能强大的消息系统 。与传统的消息系统相比, Kafka 能够很好地处理活跃的流数据,使得数据在各个子系统中高性能、低延迟地不停流转。

Kafka 官方网站介绍, Kafka 定位就是一个分布式流处理处理平台,必须具备以下 个关键特性。 能够允许发布和订阅流数据。从这个角度来讲,平台更Kafka 简介 消息系统。

1. 存储流数据时提供相应的容错机制。

2. 当流数据到达时能够被及时处理

kafka下载:http://kafka.apache.org/downloads

下载好,解压。

启动如下:

1.启动zookeeper: 

    1. cd C:\tools\kafka\kafka_2.11-1.1.1\bin\windows + 回车

    2.zookeeper-server-start.bat C:\tools\kafka\kafka_2.11-1.1.1\config\zookeeper.properties +回车 【这样zk就启动啦】

2.启动kafka:

   1. cd C:\tools\kafka\kafka_2.11-1.1.1\bin\windows + 回车

   2.kafka-server-start.bat C:\tools\kafka\kafka_2.11-1.1.1\config\server.properties +回车 【这样kafka 就启动啦】

kafka Manager 安装:

  1.下载安装包:https://pan.baidu.com/s/1tW_5diGSg2ZhJFAnwy4w9w  提取码:bps9 

  2.在c盘下进行建文件夹KM,将安装包进行解压

  3.将配置文件C:\tools\km\km\conf\application.conf      修改成:kafka-manager.zkhosts="localhost:2181"

  4.启动C:\tools\km\km\bin\kafka-manager.bat【需要依次启动ZK,kafka,KM】

  5.访问:http://127.0.0.1:9000

  6.如下画面:

   

3.下面开始创建项目运用kafka

kafka 组件的概念:

主题

Kafka 组消息抽象归纳为 个主题( Topic ),也就是说,一个主题就是对消息的 分类。生产者将消息发送到特定主题,消费者订阅主题或主题的某些分区进行消费。

2. 消息

消息是 Kafka 通信的基本单位,由 个固定长度的消息头和 个可变长度的消息体构成 在老版本中,每 条消息称为 Message :在由 Java 重新实现的客户端中,每 条消息称为 Record。

3.分区和副本

Kafka 组消息归纳为 个主题,而每个主题又被分成 个或多个分区( Partition 个分区由 系列有序、不可变的消息组成,是一个有序队列。 每个分区在物理上对应为 个文件夹,分区的命名规则为主题名称后接“一”连接符,之 后再接分区编号,分区编号从 开始,编号最大值为分区的总数减 每个分区又有 至多个 副本( Replica ),分区的副本分布在集群的不同代理上,以提高可用性 。

Kafka 只能保证 个分区之内消息的有序性,并不能保证跨分区消息的有序性 每条消息 被追加到相应的分区中,是顺序写磁盘,因此效率非常高,这是 Kafka 高吞吐率的 个重要保 证。同时与传统消息系统不同的是, Kafka 并不会立即删除已被消费的消息,由于磁盘的限制 消息也不会 直被存储,因此 Kafka 提供两种删除老数据的策略, 是基于消息己存储的时间长度, 是基于分区的大小。这两种策略都能通过配置文件进行配 置。

4. Leader 副本和 Follower 副本

由于 Kafka 副本的存在,就需要保证 1个分区的多个副本之间数据的 1致性, Kafka 会选 择该分区的 1个副本作为 Leader 副本,而该分区其他副本即为 Follower 副本,只有 Leader 副本才负责处理客户端读/写请求, Follower 副本从 Leader 副本同步数据。

引入 Leader 副本后客户端只需与 Leader 副本进行交互,这样数据一致性及顺序性就有了 保证 副本 Follower Leader 的角色并不是固定不变的,如果 Leader 失效, 通过相应的选举算法将从其他 Follower 副本中选出新的 Leader 副本。

偏移量

任何发布到分区的消息会被直接追加到日志文件(分区目录下以" .log ”为文件名后缀的 数据文件〉的尾部,而每条消息在日志文件中的位置都会对应一个按序递增的偏移 。偏移量是一个分区下严格有序的逻辑值,它并不表示消息在磁盘上的物理位置 由于 Kafka 几乎不允 许对消息进行随机读写,因此 Kafka 并没有提供额外索引机制到存储偏移 ,也就是说并不会 给偏移量再提供索引。消费者可以通过控制消息偏移量来对消息进行消费,如消费者可以指定 消费的起始偏移量。为了保证消息被顺序消费 消费者己消费的消息对应的偏移量也需要保存。

6. 日志段

1个日志又被划分为多个日志段( LogSegment ),日志段是 Kafka 日志对象分片的最小单 位。与 日志对象 一样,日志段也是 1个逻辑概念, 1个日志段对应磁盘上 一个具体日志文件和 两个索引文件。日志文件是以 .log ”为文件名后缀的数据文件,用于保存消息实际数据 ,2个索引文件分别以“ .index ”和“ timeindex ”作为文件名后缀,分别表示消息偏移量索 引文件 和消息时间戳索引文件。

7. 代理

Kafka 基本体系结构中我 提到了 Kafka 集群 Kafka 集群就是由一个或多个 Kafka 实例构成,我们将每一个 Kafka 实例称为代理( Broker ),通常也称代理为 Kafka 服务器 ( KafkaServer) 。在生产环境中 Kafka 集群 般包括一台或多台服务器,我们可以在一台服务器 上配置 1个或多个代理。每 个代理都有唯 的标识 id ,这个 id 个非负整数。在一 Kafka 集群中,每增加 1个代理就需要为这个代理配置 1个与该集群中其他代理不同的 id, id 值可以 选择任意非负整数即可,只要保证它在整个 Kafka 集群中唯 ,这个 id 就是代理的名字,也就 是在启动代理时配置的 broker.id 对应的值。这样对代理进行迁移就变得更方便,从而对消费者来说是透明 不会影响消费者对消息的消费。

8. 生产者

生产者(Producer )负责将消息发送给代理,也就是向 Kafka 理发送消息的客户端

9. 消费者和消费组

消费者( comsumer )以拉取( pull )方式拉取数据,它是消费的客户端。在 Kafka 每一 个消费者都属于 个特定消费组( ConsumerGroup ),我们可以为每个消费者指定 一个消费组, groupld 代表消费组名称,通过 group.id 置设置 如果不指定消费组,则该消费者属于默认消费组 test-consumer-group 同时,每个消费者也有 1个全局唯 一的id,通过配置项 client.id指定,如果客户端没有指定消费者的 id, Kafka 会自动为该消费者生成1 个全局唯 id ,格 式为$ {groupld }-$ {hostN ame }-$ {times tamp}-$ {UUID 前8位字符}。同一个主题的一条消息只能被同 1个消费组下某 1个消费者消费,但不同消费组的消费者可同时消费该消息 。消费组是 Kafka 用来实现对一个主题消息进行广播和单播的手段,实现消息广播只需指定各消费者均属于不同 的消费组,消息单播则只 让各消费者属于同 1个消费组。

 

10. ISR

Kafka ZooKeeper 中动态维护了 IS R(In-sync Replica ),即保存同步的副本列表, 列表中保存的是与 Leader 副本保持消息同步的所有副本对应的代理节点 id 如果 Follower 副本岩机或是落后太多,则该 Follower 副本节点将从 ISR 列表中移除。

11. ZooKeeper

 ZooKeeper 保存相应元数据信息, Kafka 元数据信息包括如代理节点信息、 Kafka 集群信息、旧版消费者信息及其消费偏移量信息、主题信息、分区状态信息、分区副本分配方 案信息、动态配置信息等。 Kafka 在启动或运行过程当中会在 ZooKeeper 上创建相应节点来保 存元数据信息, Kafka 通过监昕机制在这些节点注册相应监听器来监昕节点元数据的变化,从 而由ZooKeeper 负责管理维护 Kafka 集群,同时通过 ZooKeeper 我们能够很方便地对 Kafka 群进行水平扩展及数据迁移。

Kafka 设计动机

Kafka 的设计初衷是使 Kafka 能够成为统一 、实时处理大规模数据的平台。为了达到这个 目标, Kafka 必须支持以下几个应用场景:

(l) 具有高吞吐量来支持诸如实时的日志集这样的大规模事件流。

(2 )能够很好地处理大量积压的数据,以便能够周期性地加载离线数据进行处理

(3 )能够低延迟地处理传统消息应用场景。

(4 )能够支持分区、分布式,实时地处理消息,同时具有容错保障机制

kafka特性:

1.Kafka 高度依赖于文件系统来存储和缓存消息。操作系统提供 了预读( read-ahead )和延迟写(write-behind )技术,可以非常快的支持读写。消息系统数据持久化 般采用为每个消费者队列提供 一个B树或其他通用的随机访问数 据结构来维护消息的元数据。由于 Kafka 将消息进行持久化,使得 Kafka 在机器重启后,己存储的消息可继续恢复 使用 同时 Kafka 能够很好地支持在线或离线处理、与其他存储及流处理框架的集成。

2.高吞吐量

高吞吐量  Kafka 设计的主要目标, Kafka 将数据写到磁盘,充分利用磁盘的顺序读写 。同时, Kafka 在数据写入及数据同步采用了零拷贝( zero-copy )技术,采用 sendFile ()函数调用, sendFile()函数是在两个文件描述符之间直接传递数据,完全在内核中操作,从而避免了内核缓 冲区与用户缓冲区之间数据的拷贝,操作效率极高。 Kafka 还支持数据压缩及批 量发送,同时 Kafka 将每个 主题划分为多个分区,这 一系列的优化及实现方法使得 Kafka 具有很高的吞吐量。 经 Kafka 应用的验证, Kafka 支持每秒数百万级别的消息。

3.扩展性

Kafka 要支持对大规模数据的处理,就必须能够对集群进行扩展,分布式必须是其特性之一,这样就可以将多台廉价的 PC 服务器搭建成一个大规模的消息系统 Kafka 依赖 ZooKeeper 来对集群进行协调管理,这样使得 Kafka 更加容易进行水平扩展,生产者、消费者和代理都为 分布式,可配置多个 同时在机器扩展时无需将整个集群停机,集群能够自动感知,重新进行 负责均衡及数据复制。

4.多客户端支持

Kafka 支持多种连接器 (Connector )的接入,也提供了 Connector API 供开发者调用 Kafka 与当前主流的大数据框架 都能很好地集成,如 Flume Hadoop HBase Hive Spark Storm 等。

5.Kafka Streams

Kafka 0.10 之后版本中引入 Kafak Streams, Kafka Streams 是一个用 Java 实现的用 于流处理的 jar 文件。

6.安全机制

通过 SSL 和 SASL(Kerberos), SASL/PLA时验证机制支持生产者、消费者与代理连接 时的身份认证:

支持代理与 ZooKeeper 连接身份验证:

. 通信时数据加密:

客户端读、写权限认证:

Kafka 支持与外部其他认证授权服务的集成

7. 数据备份

Kafka 可以为每个主题指定副本数,对数据进行持久化备份,这可以 定程度上防止数据 丢失,提高可用性。

8.轻量级

Kafka 的代理是无状态的,即代理不记录消息是否被消费,消费偏移 量的管理交由消费者 自己或组协调器来维护。同时集群本身几乎不需要生产者和消费者的状态信息,这就使得 Kafka 非常轻量级,同时生产者和消费者客户端实现也非常轻量级。

9. 消息压缩

Kafka 支持 Gzip, Snappy LZ4  3种压缩方式,通常把多条消息放在 起组成 MessageSet, 然后再把 Message Set 放到 条消息里面去,从而提高压缩比率进而提高吞吐量。

Kafka 应用场景

消息系统或是说消息队列中间件是当前处理大数据 个非常重要的组件,用来解决应用解耦、异步通信、流量控制等问题,从而构建一个高效、灵活、消息同步和异步传输处理、存储转发、可伸缩和最终一致性的稳定系统。当前比较流行的消息中间件有 Kafka, RocketMQ, RabbitMQ, ZeroMQ, ActiveMQ, MetaMQ,Redis等,这些消息中间件在性能及功能上各有所 长。

使用场景:

( 1)消息系统 Kafka 作为一款优秀的消息系统,具有高吞吐量、 内置的分区、备份冗余 分布式等特点,为大规模消息处理提供了一种很好的解决方案。

(2 )应用监控。利用 Kafka 采集应用程序和服务器健康相关的指标,如 CPU 占用率、 IO ,内存、连接数、 TPS ,QPS 等,然后将指标信息进行处理,从而构建 个具有监控仪表盘、曲 线图等可视化监控系统。例如,很多公司采用 Kafka ELK (Elastic Search Logstash Kibana) 整合构建应用服务监控系统。

(3 )网站用户行为追踪。为了更好地了解用户行为、操作习惯,改善用户体验,进而对产 品升级改进,将用户操作轨迹、内容等信息发送到 Kafka 集群上,通过 Hadoop Spark Strom 等进行数据分析处理,生成相应的统计报告,为推荐系统推荐对象建模提供数据源,进而为每 个用户进行个性化推荐。

(4 流处理 ,需要将己收集的流数据提供给其他流式计算框架进行处理,用 Kafka 收集流 个不错的选择,而且当前版本的 Kafka 提供了 Kafka Streams 支持对流数据的处理 )持久性日志。

(5)持久性日志, Kafka 可以为外部系统提供一种持久性日志的分布式系统。日志可以在 多个节点间进行备份 Kafka 为故障节点数据恢复提供了 一种重新同步的机制。同时, Kafka 便与 HDFS Flume 进行整合,这样就方便将 Kafka 采集的数据持久化到其他外部系统 。

项目展示:https://download.csdn.net/download/qq_35781178/11454179

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章