kafka个人基础教程(一)基础篇

什么是kafa

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

什么是流处理平台?

流处理平台有三个关键功能:

  • 发布和订阅记录流,类似于消息队列或企业消息系统。
  • 以容错的持久方式存储记录流。
  • 在记录发生时处理记录流。
kafka两大用处
  • 构建实时流数据管道,在系统或应用程序之间可靠地获取数据
  • 构建实时流应用程序,转换或响应数据流

概念

  • Kafka作为集群运行在一个或多个服务器上,这些服务器可以跨多个数据中心。
  • Kafka集群将记录流存储在称为toptcis的类别中。
  • 每条记录由一个键、一个值和一个时间戳组成。
关于Kafka 4个核心API
  • Producer API(生产者) 允许应用程序将记录流发布到一个或多个Kafka主题。
  • Consumer API(订阅者) 允许应用程序订阅一个或多个主题,并处理向它们生成的记录流。
  • Streams API(流处理) 允许应用程序充当流处理器,使用来自一个或多个主题的输入流,并将输出流生成到一个或多个输出主题,从而有效地将输入流转换为输出流。
  • Connector API(连接器) 允许构建和运行可重用的生产者或消费者,这些生产者或消费者将Kafka toptcis连接到现有的应用程序或数据系统。例如,到关系数据库的连接器可能会捕获对表的每次更改。
    在这里插入图片描述
    kafka中的客户机和服务器之间的通信使用简单、高性能、语言无关的TCP协议
toptic(主题) 和 log(日志)
  • toptic 是发布记录的类别或提要名称。toptic始终是多订阅者的;也就是说,一个toptic 可以有零个、一个或多个订阅其所写数据的消费者。
  • 对于每个toptic ,Kafka集群维护一个分区日志,如下所示:
    在这里插入图片描述

每个分区都是一个有序的、不可变的记录序列,这些记录连续地附加到一个结构化的提交日志中。分区中的每条记录都被分配了一个名为偏移量的连续id号,该偏移量是唯一的并标识分区中的每条记录。

Kafka集群使用一个可配置的保留期持久地保存所有已发布的记录(无论它们是否已被使用)。例如,如果保留策略被设置为两天,那么在记录发布后的两天内,它是可用的,在此之后,它将被丢弃以释放空间。Kafka的性能在数据大小方面是稳定的,所以长时间存储数据不是问题。
在这里插入图片描述
实际上,在每个使用者的基础上保留的唯一元数据是该使用者在日志中的偏移量或位置。这个偏移量由使用者控制:通常,使用者在读取记录时将线性地推进它的偏移量,但是,实际上,由于位置由使用者控制,所以它可以按照自己喜欢的任何顺序使用记录。例如,使用者可以重置为较早的偏移量,以便重新处理来自过去的数据,或者跳过到最近的记录,从“现在”开始消费。

这些特性的组合意味着Kafka消费者非常使用起来非常方便——他们可以来来去去,而不会对集群或其他消费者造成太大影响。例如,您可以使用kafka的命令行工具“跟踪”任何主题的内容,而不需要更改任何现有使用者所使用的内容。

日志中的分区有几个用途。首先,它们允许日志扩展到超出单个服务器所能容纳的大小。每个单独的分区必须适合承载它的服务器,但是一个toptic可能有多个分区,因此它可以处理任意数量的数据。其次,它们充当了并行性的单位 - 更多的是在一点上。

分布

日志的分区分布在Kafka集群中的服务器上,每个服务器处理数据并请求共享分区。为了容错,每个分区被复制到多个可配置的服务器上。

每个分区都有一个充当“领导者”的服务器和零个或多个充当“追随者”的服务器。leader处理分区的所有读和写请求,而follower被动地复制leader。如果领导者失败,其中一个追随者将自动成为新的领导者。每个服务器充当它的一些分区的领导者和其他分区的追随者,因此集群内的负载非常平衡。

Producer (生产者)

生产者将数据发布到他们选择的主题。生产者负责选择要分配给主题中的哪个分区的记录。这可以通过循环方式来完成,只是为了平衡负载,也可以根据语义分区函数(比如基于记录中的某个键)来完成。稍后将详细介绍分区的使用!

consumer(消费者)

使用者使用使用者组名称给自己贴标签,每个发布到主题的记录被交付到每个订阅使用者组中的一个使用者实例。使用者实例可以位于单独的进程中,也可以位于单独的机器上。
如果所有使用者实例都具有相同的使用者组,那么记录将有效地在使用者实例上进行负载平衡。

如果所有使用者实例具有不同的使用者组,则每个记录将广播到所有使用者进程。
在这里插入图片描述

Brokers(经纪人)

代理是负责维护发布数据的简单系统。比如,生产者一分钟生产了10个鸡蛋,但是消费者一分钟只能消费5个鸡蛋,那剩下的鸡蛋怎么办?现实生活中我们吃不下的鸡蛋都是放在冰箱里的,所以可以把Brokers理解为冰箱,以后生产者没生产一个鸡蛋就放入冰箱里,而消费者直接从冰箱里拿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值