kafka学习笔记

学习来源:强烈推荐

https://www.orchome.com/kafka/index  作者:半兽人  来源:OrcHome

可补充:https://www.cnblogs.com/jingangtx/p/11330343.html

kafka

1、kafka是什么

关键词:Apache kafka、消息中间件、实时数据管道、数据流、分布式、高效并实时、生产者与消费者、横向扩容、发布和订阅

kafka是用于构建实时数据管道和流应用程序。具有横向扩展,容错,wicked fast(变态快)等优点,并已在成千上万家公司运行。

有关名词解释:

  • producer:生产者,生产数据。(有对应的队列,即topic)
  • consumer:消费者,消费数据。(有对应的队列,即topic)
  • topic:队列标签(topic),消费者只消费特定的队列数据,不同的生产者生产的数据,消费者可以选择性消费。
  • broker:就是篮子了(分布式中的节点,称为代理)。
     

2、kafka能做什么,应用场景

分布式实时处理数据流,充当数据流的中转站,有临时存储、容错、高效实时的特性。可用于消息系统、网站活动追踪、指标检测、日志聚合、流处理、事件采集、提交日志等

  1. 构建实时的流数据管道,可靠地获取系统和应用程序之间的数据。
  2. 构建实时流的应用程序,对数据流进行转换或反应。

3、特性

集群:运行在一个或多个服务器

存储:以topic为类别记录,以分区log的形式存储,每个分区是一个顺序的、不可变的消息队列,可持续添加,分区中的每个消息被分发一个序列号(即偏移量offset,消费者消费时持有的仅有的元数据便是offset,记录消费进度,并且可自由调整offset,以达到消费已消费过的数据的目的,且消费者之间的操作互相独立),在每个分区中此偏移量都是唯一的。Kafka集群保持所有的消息,直到它们过期(无论消息是否被消费)。

            

分区的目的:(1)处理更多的消息,不受单台服务器限制;(2)分区可作为并行处理的单元;

每个消息:由key、value、时间戳组成

分布式(Distribution)

Log的分区被分布到集群中的多个服务器上。每个服务器处理它分到的分区。 根据配置每个分区还可以复制到其它服务器作为备份容错。 每个分区有一个leader,零或多个followerLeader处理此分区的所有的读写请求,而follower被动的复制数据。如果leader宕机,其它的一个follower会被推举为新的leader。 一台服务器可能同时存在一个分区的leader,另一个分区的follower。 这样可以平衡负载,避免所有的请求都只让一台或者某几台服务器处理。

四个核心API

  • 应用程序使用 Producer API 发布消息到1个或多个topic(主题)中。
  • 应用程序使用 Consumer API 来订阅一个或多个topic,并处理产生的消息。
  • 应用程序使用 Streams API 充当一个流处理器,从1个或多个topic消费输入流,并生产一个输出流到1个或多个输出topic,有效地将输入流转换到输出流。
  • Connector API 可构建或运行可重用的生产者或消费者,将topic连接到现有的应用程序或数据系统。例如,连接到关系数据库的连接器可以捕获表的每个变更。

kafka入门介绍

Client和Server之间的通讯,是通过一条简单、高性能并且和开发语言无关的TCP协议。并且该协议保持与老版本的兼容。Kafka提供了Java Client(客户端)。除了Java客户端外,还有非常多的其它编程语言的客户端。

生产者:往特定topic发布消息,并且负责选择要发往的分区。分区的选择由开发者决定。

消费者:

通常来讲,消息模型可以分为两种, 队列发布-订阅式。 队列的处理方式是 一组消费者从服务器读取消息,一条消息只有其中的一个消费者来处理。在发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。

Kafka为这两种模型提供了单一的消费者抽象模型: 消费者组 (consumer group)。 消费者用一个消费者组名标记自己。 一个发布在Topic上消息被分发给此消费者组中的一个消费者。 假如所有的消费者都在一个组中,那么这就变成了queue模型。 假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。 更通用的, 我们可以创建一些消费者组作为逻辑上的订阅者。每个组包含数目不等的消费者, 一个组内多个消费者可以用来扩展性能和容错。正如下图所示:
screenshot

2个kafka集群托管4个分区(P0-P3),2个消费者组,消费组A有2个消费者实例,消费组B有4个。

Kafka的保证(Guarantees)

  • 生产者发送到一个特定的Topic的分区上,消息将会按照它们发送的顺序依次加入,也就是说,如果一个消息M1和M2使用相同的producer发送,M1先发送,那么M1将比M2的offset低,并且优先的出现在日志中。
  • 消费者收到的消息也是此顺序。
  • 如果一个Topic配置了复制因子(replication factor)为N, 那么可以允许N-1服务器宕机而不丢失任何已经提交(committed)的消息。
  •  

  • 思考

  • kafka节点之间如何复制备份的? 
  • kafka消息是否会丢失?为什么?
  • kafka最合理的配置是什么?
  • kafka的leader选举机制是什么?
  • kafka对硬件的配置有什么要求?
  • kafka的消息保证有几种方式?
  • kafka为什么会丢消息?

4、与传统企业消息系统对比

(1)概念上:

传统的消息有两种模式队列(每个消息只被其中一个消费者读,若进程读取故障,消息会丢失)发布订阅(每个消息广播给所有消费者,没办法缩放处理)

kafka中消费者组:    消费者组包含了队列(同一时间,只允许同名消费者组的一名消费者组成员处理一个topic分区)与发布订阅(一个分区可同时被多个消费者组消费)两种模式;

(2)顺序保证上

传统:系统按顺序存储数据,并按顺序发送消息,但多个消费者从队列消费时,消息异步到达消费者,会造成乱序,即并行消费的情况,顺序无法保证。通常通过仅设置一个消费者来解决这个问题,意味着失去了并行处理;

kafka: 并行消费topic的parition —— kafka提供了顺序保证和负载均衡。即同一分区的顺序消费,多个分区的并行消费,达到均衡负载。(注意:消费者组成员数小于等于topic分区数,否则多出的消费者一直处于空等待,不会收到消息)

(3)kafka作为一个存储系统(可当作一种专用于高性能、低延迟、提交日志存储,复制和传播特殊用途的分布式文件系统

    a、数据写入磁盘并复制到集群中,保证容错性。允许生产者等待应答,直到消息准确写入。

    b、优秀的磁盘结构---无论服务器上有50KB还是50TB,执行是相同。(磁盘顺序读写速度超过内存随机读写

kafka数据存储:数据文件分段划分offset,可用二分查找定位数据段)、为数据文件建索引(相对offset的绝对位置,记作position,缩小扫描范围)

    c、client控制读取数据的位置(偏移量)。

(4)kafka的流处理

kafka不仅只提供读、写和存储功能,因为它是一个流式处理平台,即它的目标是实时的流处理。

在kafka中,流处理持续获取输入topic的数据,进行处理加工,然后写入输出topic

可以直接使用producer和consumer API进行简单的处理。对于复杂的转换,Kafka提供了更强大的Streams API。可构建聚合计算连接流到一起的复杂应用程序。

助于解决此类应用面临的硬性问题:处理无序的数据,代码更改的再处理,执行状态计算等。

Sterams API在Kafka中的核心:使用producer和consumer API作为输入,利用Kafka做状态存储,使用相同的组机制在stream处理器实例之间进行容错保障。

(5)功能的解析

kafka = 消息传递 + 数据的存储 + 流实时处理          ----------------->       流式处理平台

结合HDFS(分布式文件系统,允许存储静态文件进行批处理,即可有效地存储和处理来自过去的历史数据)与传统企业信息系统(订阅之后可处理未来的消息,即实时处理新消息)的能力。

批处理以及消息驱动应用程序的流处理的概念:通过组合存储和低延迟订阅,流处理应用可以用相同的方式对待过去和未来的数据。它是一个单一的应用程序,它可以处理历史的存储数据,当它处理到最后一个消息时,它进入等待未来的数据到达,而不是结束。

同样,对于流数据管道(pipeline),订阅实时事件的组合使得可以将Kafka用于非常低延迟的管道;但是,可靠地存储数据的能力使得它可以将其用于必须保证传递的关键数据,或与仅定期加载数据或长时间维护的离线系统集成在一起。流处理可以在数据到达时转换它。

有关kafka的详细信息,可前往原网页https://www.orchome.com/kafka/index

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值