Kafka(一、Kafka简介)

kafka官网地址:http://kafka.apache.org/intro.html

Kakfa简介

Apache Kafka 是一个分布式流平台。
流媒体平台有三个关键功能:

  1. 发布和订阅记录流,类似于消息队列或企业消息系统。
  2. 以容错持久的方式存储记录流。
  3. 当记录流产生的时候可以即时处理。

kafka通常用于两大类应用:

  1. 构建可在系统或应用程序之间可靠获取数据的实时流数据管道。
  2. 构建实时流应用程序,用于转换或实时响应数据流。

首先有几个概念:

  • Kafka作为一个集群运行在一台或多台可以跨越多个数据中心的服务器上。
  • Kafka集群在称为topic的类别中存储记录流。
  • 每个记录由一个key,一个value和一个timeStamp组成。

kafka有四个核心API:

  • Producer API: 允许应用程序将记录流发布到一个或多个Kafka topic。
  • Consumer API: 允许应用程序订阅一个或多个topic并处理为他们生成的记录流。
  • Streams API: 允许应用程序充当流处理器,从一个或多个topic消费输入流,并将输出流输出到一个或多个输出topic,从而将输入流有效地转换为输出流。
  • Connector API: 允许构建和运行可重复使用的生产者或消费者,这些生产者或消费者可以将Kafka topic连接到现有的应用程序或数据系统。例如,连接到关系数据库的connector可以会捕获对表的每个更改然后发送到topic。
    在这里插入图片描述

主题和分区

kafka的消息通过主题进行分类。主题就好比数据库的表,或者文件系统里的文件夹。主题可以被分为若干个分区,一个分区就是一个提交日志。消息以追加的方式写入分区,然后以先入先出的顺序读取。要注意,由于一个主题一般包含几个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。如下图所示:
生产者将消息写进三个分区:partition0,partition1,partition2;其序号是递增的。Kafka通过分区来实现数据冗余和伸缩性。分区可以分布在不同的服务器上,也就是说:一个主题(Topic)可以横跨多个服务器,一次来提供比单个服务器更强大的性能。
主题和分区
每个partition 都是一个有序的,不可变的记录序列,不断追加到结构化的提交日志中。partition 中的记录每个分配一个连续的id号,称为offset,用于唯一标识分区内的每条记录。

Kafka集群使用可配置的保留时间持续保留所有已发布的记录 - 不管它们是否已被消费。例如,如果保留策略设置为两天,则在记录发布后的两天内,保留策略可用于消费,之后将被丢弃以释放空间。kafka的性能和数据大小是无关的,因此长时间存储数据不成问题。
生产者
实际上,消费者维护的基础的唯一元数据是该消费者在log中的offset。这个offset是由消费者控制的:消费者通常会在读取记录时线性地推进其offset,但实际上,由于offset由消费者控制,因此它可以按照喜欢的任何顺序消费记录。例如,消费者可以重置为较旧的偏移量以重新处理之前的数据,或者跳至最近的记录并从“now”开始消费。

这种功能的组合意味着kafka消费者非常灵活 - 他们可以反复消费记录,但是对集群或其他消费者没有太大影响。例如,您可以使用我们的命令行工具来“tail”任何topic的内容,而无需更改任何现有消费者消费的内容。

log中的分区有多种用途。首先,它们允许日志的大小超出服务器限制的单个文件大小。虽然每个单独的分区必须满足服务器的限制,但是一个topic可能有很多分区,因此topic可以处理任意数量的数据。其次,也是最主要的一点,分区还可以作为并行处理的单位 。

生产者和消费者

kafka的客户端就是kafka系统的用户,他们被分为两种基本类型:生产者和消费者。
生产者:创建消息。一般情况下一个消息会被发布到一个特定的主题上。生产者在默认情况下把消息均衡地分布到主题的所有分区上,而并不关心特定消息会被写到哪个分区。不过,在某些情况下,生产者会把消息直接写到指定的分区。通常是通过消息键和分区器来实现,分区器为键生成一个散列值,并将其映射到指定的分区上。这样可以保证包含同一个键的消息会被写到同一个分区上。生产者也可以使用自定义的分区器。
消费者:读取消息。消费者订阅一个或多个主题,并按照消息生产的顺序读取它们。消费者通过检查消息的偏移量来区分已经读取过的消息。偏移量是另一种元数据,他是一个不断递增的整数值,在创建消息时,Kafka回吧它添加到消息里。在给定的分区里,每个消息的偏移量都是唯一的。消费者把每个分区最后读取的消息偏移量保存在Zookeeper或者Kafka上,如果消费者关闭或重启,它的读取状态不会丢失。

消费者是消费者群组的一部分,也就是说,会有一个或多个消费者共同读取一个主题。群组保证每个分区只能被一个消费者使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值