Kafka技术之旅(1)Kafka的基本原理及介绍

kafka架构与原理

Kafka的介绍和历史

  • Kafka是最初由Linkedin公司开发,是一个分布式(Distribute)、分区(Partition)的、多副本(Replica)的、多生产者(Producer)、多订阅者(Consumer)

  • 最初是基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目

Kakfa的概念和定义

  • 【Kafka】是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域,它可以让你发布和订阅记录流。在这方面,它类似于一个消息队列或企业消息系统,它可以让你持久化收到的记录流,从而具有容错能力。

Kafka的主要应用场景

日志收集系统和消息系统。

  • 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer

  • 消息系统:解耦生产者和消费者、缓存消息等

  • 用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后消费者通过订阅这些topic来做实时的监控分析,亦可保存到数据库

  • 运营指标:kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;

  • 流式处理:推荐系统或者推荐新闻文章的处理管道,我们可以将从RSS提要中抓取文章的内容,然后将内容发布到文章的主题中,有兴趣可以了解Apache Kafka官网查看,它从0.10.0.0开始,提供了一个轻量级流处理库Kafka Streams,是用于执行上的数据处理的,这个功能非常的强大。流处理还有storm、samza、flink

  • 检测数据:Kafka可以作为检测数据,比如分布式应用程序中的聚合统计数据,然后我们统一集中处理

Kafka的基本特性

首先,明确几个概念:

  • 分布式部署:Kafka运行在一个或多个服务器,分布式系统,易于向外扩展,所有的producer、broker和consumer都会有多个,均为分布式的,无需停机即可扩展机器。

  • 持久化特性:将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication防止数据丢失。

  • 存储的方式:Kafka集群分类存储的记录流被称为主题,其实是以分区为单位。

  • 消息的结构:Kafka每个消息记录包含一个键(key),一个值(value)和时间戳(timestamp)。

  • 高性能吞吐量:Kafka服务同时为发布和订阅提供高吞吐量:据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。

  • 自处理特性:消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡(Rebalance)。支持online和offline的场景。

Kafka的设计目标

  • 时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能

  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒10万条消息的传输

  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输

  • 同时支持离线数据处理和实时数据处理

  • 支持在线水平扩展。

Kafka的基础架构

  • Kafka的整体架构非常简单,是显式分布式架构,producer、broker和consumer。

  • kafka的架构是可以有多个Producer,consumer实现Kafka注册的接口。

    • 数据从producer发送到broker。

    • broker承担一个中间缓存和分发的作用,即活跃的数据和离线处理系统之间的缓存

    • broker分发注册到系统中的consumer。

    • 客户端和服务器端的通信,是基于简单,高性能,且与编程语言无关的TCP协议。

Kafka技术之旅(1)Kafka的基本原理及介绍_第1张图片

  • 有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式

Kafka的总体架构

Kafka技术之旅(1)Kafka的基本原理及介绍_第2张图片

Kafka成员的基础概念

Broker(服务节点)

Kafka集群中的一台或多台服务器统称为broker,多个broker组成kafka组,主要负责缓存代理,一个机器上可以部署一个或者多个broker,这多个broker连接到相同的Zookeeper就组成了Kafka集群,如下图所示。

Kafka技术之旅(1)Kafka的基本原理及介绍_第3张图片

Topic(主题)

主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务,这里的逻辑容器可以看做是消息的类别,我们将同一类的消息放在一个Topic,特指Kafka处理的消息源(feeds of messages)的不同分类。

Topic与broker的关系

一个Broker上可以创建一个或者多个Topic。同一个topic可以在同一集群下的多个Broker中分布。

Kafka技术之旅(1)Kafka的基本原理及介绍_第4张图片

Topic只是一个逻辑组件,真正在Broker间分布式的Partition。

Partition(分区)

  • 分区是物理上的分组,Kafka会为每个topic维护了多个分区(partition),每个partition是一个有序的队列

  • 分区会给每个消息记录分配一个顺序ID号 – 偏移量(Offset),能够唯一地标识该分区中的每个记录。每个分区会映射到一个逻辑的日志(log)文件。

  • partition属于不可变的消息序列,新的消息不断追加到这个有组织的有保证的日志上

Kafka技术之旅(1)Kafka的基本原理及介绍_第5张图片

Kafka集群中按照主题分类管理,一个主题可以有多个分区,一个分区可以有多个副本分区。

Message(消息)

  • 消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息。

  • 消息的结构:Kafka每个消息记录包含一个键(key),一个值(value)和时间戳(timestamp)。

Producer(生产者)

消息和数据生产者,向Kafka的一个topic发布消息的过程叫做生产消息

发送消息流程

  • producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里。

  • kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费

Consumer(消费者)

  • 从kafka集群pull数据,并控制获取消息的offset

  • 消息和数据消费者,订阅topics并处理其发布的消息的过程叫做consumers

  • 对于消息中间件,消息分推拉两种模式。Kafka只有消息的拉取,没有推送,可以通过轮询实现消息的推送。

Consumer Group (消费组)

  • Consumer group下有多个Consumer(消费者),顾名思义其实就是一组消费者,将消费者组织在一个组下,便于管理对于每个消费者组 (Consumer Group),Kafka都会为其分配一个全局唯一的Group ID,Group内部的所有消费者共享该ID

  • 订阅的topic下的每个分区只能分配给某个group下的一个consumer(当然该分区还可以被分配给其他group)。同时,Kafka为每个消费者分配一个Consumer ID,通常采用"Hostname:UUID"形式表示

Kafka的四个核心API

  • Producer API:允许应用程序将记录流发布到一个或多个Kafka主题

  • Consumer API:允许应用程序订阅一个或多个主题并处理为其生成的记录流。

  • Streams API:允许应用程序充当流处理器,使用一个或多个主题的输入流,并生成一个或多个输出主题的输出流,从而有效地将输入流转换为输出流

  • Connector API:允许构建和运行将Kafka主题连接到现有应用程序或数据系统的可重用生产者或使用者。例如,关系数据库的连接器可能会捕获对表的所有更改

Kafka的客户端和服务器之间的通信是靠一个简单的,高性能的,与语言无关的TCP协议完成的。这个协议有不同的版本,并保持向前兼容旧版本。Kafka不光提供了一个Java客户端,还有许多语言版本的客户端。

核心优势

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒

  • 可扩展性:kafka集群支持热扩展

  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;

  • 容错性:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障);

  • 高并发:支持数千个客户端同时读写

你可能感兴趣的:(Kafka技术专题,kafka,java,消息队列,大数据)