ITPub博客

首页 > 大数据 > ELK > Kafka简介

Kafka简介

原创 ELK 作者:carr_fu 时间:2022-03-22 20:50:25 0 删除 编辑

1.概念

    Kafka是众多MQ当中的一个,且是开源的应用广泛的组件,是Apache的顶级项目。

Kafka是一个分布式发布-订阅消息系统(放信息取信息)和一个强大的队列。使用scala语言编写,非常适合离线(不及时取)和在线(及时取)消息消费。kafka消息保留在磁盘上,并在集群内复制以防止数据丢失。同时它Kafka与Flink,Spark等计算框架组件有非常好的集成,应用于实时流式数据分析。Kafka擅长收信息、存信息、取信息和消费信息,如桥梁和中转站的角色。

2.历史

    Kafka起源于国内的Linkedin(领英)公司。 Linkedin是一家类似于猎聘、Boss直聘的招聘和社交网站,是一家科技驱动的典型的2C公司。2C(个人)客户的诉求是非常个性化的,想解决个性化的用户体验,必须去用量化数据盘点所有的信息。这个信息来自各个系统,要大量的采集,那么下游消费就会遇到很多瓶颈。 起初,LinkedIn需要收集各个业务系统和应用的指标数据来进行数据分析,原先是使用“自定义开发”系统来实现,但这期间需要采集的数 据量非常大,而且内容很复杂,除需要采集操作系统的基础指标(例如内存、 CPU、磁盘、网络等)外,还要采集很多和业务相关的数据指标。随着数据量的增长,业务需求的复杂度提高,“自定义开发”系统的问题越来越多(耦合变强),效率也越来越低。于是,LinkedIn团队开发了一个既满足实时处理需求,又可支持水平扩展(分布式)的消息系统——Kafka,它有较高的吞吐量特性。

3.优势

    ①可靠性:分布式,分区,复制(多副本数据不丢)和容错。 

    ②可扩展性:kafka消息传递系统轻松缩放(加减机器数量),无需停机。 

    ③耐用性:kafka使用分布式提交日志,这意味着消息会尽可能快速的保存在磁盘上,因此它是持久的。 

    ④性能:kafka对于发布(放到队列里)和订阅(消费)消息都具有高吞吐量。即使存储许多TB的消息,它也爆出稳定性能。 

    kafka非常快:保证零停机和零数据丢失。

4.应用场景

1、指标分析:Kafka通常用于操作监控数据。这涉及聚合来自分布式应用程序的统计信息,以产生操作数据的集中反馈。(实时监控看板)

2、日志聚合解决方法:kafka可用于跨组织从多个服务器收集日志,并使他们以标准的合适提供方式提供给多个服务器。 上游的信息发给Kafka队列,下游统一消费。如果上游压力比较大,可以用flume来汇总。

3、流式处理:流式处理框架(spark,storm,flink)从主题中读取数据,对其进行处理,并将处理后的数据写入新的主题(Topic),供用户和应用程序使用,kafka的强耐久性(即持久化即落盘)在流处理的上下文中也非常的有用(增加了数据的健壮性鲁棒性)。

5.Kafka的基本概念

(1)代理(Broker):在Kafka集群中,一个Kafka进程(Kafka进程又称为Kafka实例)被称为一个代理 (Broker)节点。代理节点是消息队列中的常用概念,通常,在部署分布式Kafka集群时,一台服务器上部署一个Kafka实例。Kafka里面有很多很多组件,不同的代理进程,互相之间有些冗余存放的动作,通过Zookeeper对元数据做全局的管控,保证所有数据是处在一致性协调下的。这里可理解为IPO中的P。

(2)生产者(Producer):在Kafka系统中,生产者通常被称为Producer。Producer将消息记录发送到 Kafka集群指定的主题(Topic)中进行存储,同时生产者(Producer)也能通过自定义算法决定消息记录发送到哪个分区(Partition)。 这个是人为写代码干预的方式,如果相关的消息记录都发送给某个Partition,那么后续在消费的时候可以通过具象的Partition集中获取,尽量偏于集中化处理(磁头顺序读取比跳着读要快得多),不要尽量打撒带来额外的管理和协调开销。这是一种优化的手段。 输入的途径是什么?有数据库、审计日志(对敏感数据)、服务日志( 应用编程中随时写日志打印日志是个好习惯,其开销对性能的影响跟后续的赋能加持来比的话是微乎其微的)、移动APP日志、其他日志,可以看出 消息队列对日志的应用是非常广泛的。 Topic概念可以理解为类似邮件的标题。 这里生产者可理解为IPO中的I。

(3)消费者(Consumer):从Kafka集群指定的主题(Topic)中读取消息记录。在读取Topic数据时,需要设置消费者组名(GroupId),如果不设置,则Kafka消费者会默认生成一个消费组名称。

(4)消费者组(Consumer Group):消费者程序在读取Kafka系统Topic中的数据时,通常会使用多个线程来执行。一个消费者组可以包含一个或多个消费者程序,使用多分区或多线程模式可以极大提高读取数据的效率。 当 信息流特别大的时候都会用分组的方式实现,是种分门别类地进行提效处理的方法。

(5)主题(Topic):Kafka系统通过主题来区分不同业务类型的消息记录。

        每一个主题(Topic)中可以有一个或多个分区(Partition)。在Kafka系统的设计思想中,分区是基于物理层面上的,不同的分区对应不同的数据文件。

        Kafka通过分区来支持物理层面上的并发读写,以提高Kafka集群的吞吐量。可以理解为放不同磁盘,这样就有多个机械手读取数据。

        每个分区(Partition)内部的消息记录都是有序的,每个消息都有一个连续的偏移量序号(Offset)。

        一个分区之对应一个代理节点(Broker),一个代理节点可以管理多个分区。

(6)记录(Record):被实际写入到Kafka集群并且可以被消费者应用程序读取的数据,被称为记录 (Record)。每条记录包含一个键(Key),值(Value)和时间戳(TimeStamp)。假如下游有10个系统要消费这个Record,那么等10个系统都消费完,就删掉了(消息队列不是永久的存储,而只是一个临时的Buffer)。

(7)副本数(Replication):在Kafka系统中,每个主题(Topic)在创建时会要求指定它的副本数,默认是1(有数据丢失风险),通过副本(Replication)机制来保证Kafka分布式集群的高可用性。

    在创建Topic时,Topic的副本系数应如下设置:

    当集群内节点数量大于等于3,则Topic的副本系数可以设置为3;

    当集群内节点数量小于3时,则Topic的副本系数值可以设置为小于等于集群数量值。

    通常情况下,当集群数量大于等于3时,为了保证集群数据不丢失,会将副本系数设置为3。 多个副本中,只有一个是 leader ,而其他的都是 follower 副本。仅有 leader 副本可以对外提供服务, 所有的读写请求都是由leader 副本进行处理的。follower 副本仅有一个功能,那就是从leader 副本拉取消息,尽量让自己跟leader 副本的内容一致。如果follower副本也提供服务,那么可能会出现 类似数据库事务中的幻读、脏读。Leader副本挂掉后, 选择最新的那个follower 副本作为leader。

  (8)偏移量 (Offset ):任何发布到此partition 的消息都会被直接追加到log 文件的尾部(分区的队尾),每条消息在

文件中的位置称为offset (偏移量),offset(增量的追加记录) 是一个long 类型数字,它唯一标识了一条消息,消费者通过(offset ,partition ,topic )跟踪记录。 Offset本质上的设计理念是用 尽量少的元数据表达方式,能够让人精准快速的找到要的那条Record。数据库中用的是RowID(全量位置信息记录),行号很长占用空间大,不擅长做大数据场景的设计。

6.Kafka消息语义(场景)

    在Kafka中,单个代理(Broker)节点可能会出现宕机,或者生产者(Producer)在向Kafka集群的 Topic发送消息时出现网络故障。Kafka生产者在处理这类异常行为时会有以下几种不同的语义。

    ①至少一次:如果在Kafka中设置ACKS=ALL,则意味着写入的消息至少有一条。如果生产者 (Producer)等待Kafka集群服务端确认发生超市,或者收到服务端响应的错误码,则会触发重 试机制。若时Kafka Broker节点在发送确认之前失败了,但是消息却成功写入到了Kafka集群 Topic,由于失败再次触发重试机制导致消息被重写,最终导致结果不正确。可以消费侧再去重。

    ②至多一次:生产者(Producer)在发送消息到Kafka集群主题(Topic)时,最多允许消息成功写 入一次,这样可避免数据重复。 丢了也没办法。

    ③精准一次:这是最符合要求的,但是也是最困难的。因为它需要消息传递系统与生产者和消费者 的应用程序之间进行配合。在成功读取一条消息后,如果用户将Kafka的偏移量(Offset)的值回 退到原点,则用户会从回退的偏移量开始读取消息,一直读取到最新的消息未知。


7.Kafka架构与原理

一个典型的kafka 集群中包含若干个Producer ,若干个Broker ,若干个Consumer ,以及一个zookeeper 集群;kafka 通过zookeeper 管理集群配置,选举leader ,以及在Consumer Group 发生变化时 进行Rebalance (负载均 衡);Producer 使

用push 模式将消息发布到Broker ;Consumer 使用pull 模式从Broker 中订阅并消费消息。













来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70015587/viewspace-2882980/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-03-21

  • 博文量
    54
  • 访问量
    1396