`

kafka详解一、Kafka简介

 
阅读更多
 

kafka详解一、Kafka简介

分类: Kafka 375人阅读 评论(0) 收藏 举报
背景:
     当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战:
  1. 如何收集这些巨大的信息
  2. 如何分析它       
  3. 如何及时做到如上两点
     以上几个挑战形成了一个业务需求模型,即生产者生产(produce)各种信息,消费者消费(consume)(处理分析)这些信息,而在生产者与消费者之间,需要一个沟通两者的桥梁-消息系统。
     从一个微观层面来说,这种需求也可理解为不同的系统之间如何传递消息。
 
Kafka诞生:由 linked-in 开源
 
kafka-即是解决这类问题的一个框架,它实现了生产者和消费者之间的无缝连接。
kafka-高产出的分布式消息系统(A high-throughput distributed messaging system)

Kafka特性:它形容自己的设计是独一无二的,先看一下它有如何过人之处:
 
  • 快:单个kafka服务每秒可处理数以千计客户端发来的几百MB数据。
  • 可扩展性:一个单一集群可作为一个大数据处理中枢,集中处理各种类型业务
  • 持久化:消息被持久化到磁盘(可处理TB数据级别数据但仍保持极高数据处理效率),并且有备份容错机制
  • 分布式:着眼于大数据领域,支持分布式,集群可处理每秒百万级别消息
  • 实时性:生产出的消息可立即被消费者消费

Kafka的组件:
  • topic:消息存放的目录即主题
  • Producer:生产消息到topic的一方
  • Consumer:订阅topic消费消息的一方    
  • Broker:Kafka的服务实例就是一个broker
如下图所示,Producer生产的消息通过网络发送给Kafka cluster,而Consumer从其中消费消息

Topic 和Partition:
 
     消息发送时都被发送到一个topic,其本质就是一个目录,而topic由是由一些Partition Logs(分区日志)组成,其组织结构如下图所示:

     我们可以看到,每个Partition中的消息都是有序的,生产的消息被不断追加到Partition log上,其中的每一个消息都被赋予了一个唯一的offset值。
     Kafka集群会保存所有的消息,不管消息有没有被消费;我们可以设定消息的过期时间,只有过期的数据才会被自动清除以释放磁盘空间。比如我们设置消息过期时间为2天,那么这2天内的所有消息都会被保存到集群中,数据只有超过了两天才会被清除。
     Kafka需要维持的元数据只有一个--消费消息在Partition中的offset值,Consumer每消费一个消息,offset就会加1。其实消息的状态完全是由Consumer控制的,Consumer可以跟踪和重设这个offset值,这样的话Consumer就可以读取任意位置的消息。
     把消息日志以Partition的形式存放有多重考虑,第一,方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;第二就是可以提高并发,因为可以以Partition为单位读写了。
     
分布式:
     这些Partitions分布在集群的每一台server上,而每一个Partition在集群中都可以有多个备份,这个备份数量是可配置的。
     每个Partition都有一个leader server,而其他备份的server都称为followers,只有leader服务器才会处理这个Partition上所有的读写请求,而其它followers则被动的复制leader上的数据。如果一个leader挂掉了,followers中的一个服务器则会自动升级为leader。因此,其实集群中的每个服务器都扮演着一个Partition的leader服务器,和其它Partition的follower服务器。
 
Producers:
     Producer可以根据自己的选择发布消息到一个主题,Producer也可以自己决定把消息发布到这个主题的哪个Partition,当然我们可以选择API提供的简单的分区选择算法,也可以自己去实现一个分区选择算法。
 
Consumers:
     消息传递通常由两种模式,queuing(队列)和publish-subscribe (发布-订阅)
  • queuing:每个Consumer从消息队列中取走一个消息
  • pub-scrib:消息被广播到每个Consumer     
     Kafka通过提供了一个对Consumer的抽象来同时实现这两种模式-ConsumerGroup。Consumer实例需要给自己指定一个ConsumerGroup的名字,如果所有的实例都用同一个ConsumerGroup名字,那么这些Consumer就会以queuing的模式工作;如果所有的实例分别用的不同的ConsumerGroup名字,那么它们就以public-subscribe模式工作。
 
如下图所示:含两台server的集群一共有p0~p3四个Partition,两个Consumer Group,在Group内部是以queuing的模式消费Partition,在Group之间是以pub-scrib模式消费。
    
消息顺序性:
     Kafka是如何确保消息消费的顺序性的呢?前面讲到过Partition,消息在一个Partition中的顺序是有序的,但是Kafka只保证消息在一个Partition中有序,如果要想使整个topic中的消息有序,那么一个topic仅设置一个Partition即可。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
分享到:
评论

相关推荐

    Kafka技术内幕:图文详解Kafka源码设计与实现+书签.pdf+源码

    《Kafka技术内幕:图文详解Kafka源码设计与实现》是一本深入解析Apache Kafka的专著,旨在帮助读者理解Kafka的核心设计理念、内部机制以及源码实现。这本书结合图文并茂的方式,使得复杂的概念变得更为易懂。同时,...

    大数据技术之Kafka详解

    大数据技术之Kafka详解 本文将对Kafka的概念、架构、特点和应用场景进行详细的解释。 Kafka的定义 Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 消息队列...

    SpringBoot使用Kafka详解含完整代码

    ### Spring Boot 使用 Kafka 详解 #### 一、前言 随着大数据时代的发展,实时数据处理的需求日益增加。Kafka作为一款高性能的分布式流处理平台,因其高吞吐量、低延迟等特点,在数据处理领域占据了一席之地。而...

    kafka参数配置详解

    Kafka参数配置详解 Kafka是一种流行的分布式流处理平台,用于构建实时数据管道和事件驱动的架构。为了确保Kafka集群的稳定运行和高性能,需要正确地配置Kafka参数。本文将详细介绍Kafka的参数配置,包括系统参数、...

    Kafka工作原理详解

    ### Kafka工作原理详解 #### 一、Kafka的角色与组件 Kafka作为一款分布式消息系统,在实际应用中涉及多种角色及组件,它们协同工作确保消息的高效传递。 1. **Broker**:Kafka集群的基本单元,一个Broker可以视为...

    Kafka技术内幕:图文详解Kafka源码设计与实现 PD

    Kafka技术内幕:图文详解Kafka源码设计与实现 PDF 下载 Kafka技术内幕:图文详解Kafka源码设计与实现 PDF 下载

    kafka配置参数详解 - 网络技术

    1. broker.id:这是Kafka broker的唯一标识符,它是一个整数,用于唯一确定集群中的每个broker。如果需要迁移broker到新的主机,更改broker.id会导致消费者和生产者无法识别新的broker,因此,broker.id应该保持不变...

    Kafka技术内幕-图文详解Kafka源码设计与实现

    Kafka自LinkedIn开源以来就以高性能、高吞吐量、分布式的特性著称,本书以0.10版本的源码为基础,深入分析了Kafka的设计与实现,包括生产者和...《Kafka技术内幕 图文详解Kafka源码设计与实现》适合Kafka开发人员阅读。

    kafka配置安装详解

    ### Kafka配置安装详解 #### 一、环境搭建与配置 Kafka是一款开源的消息队列中间件,被广泛应用于大数据处理领域。本篇文章将详细介绍如何在本地环境中安装并配置Kafka,以及进行基本的操作演示。 ##### 环境要求...

    kafkatool 连接kafka工具

    **Kafka Tool 连接 Kafka 工具详解** 在大数据处理和实时流处理领域,Apache Kafka 是一个不可或缺的组件,它作为一个分布式的消息中间件,提供高效、可扩展且可靠的发布订阅服务。为了方便管理和操作 Kafka 集群,...

    分布式消息队列kafka详解.rar

    分布式消息队列Kafka是一种高吞吐、低延迟、可扩展的消息系统,广泛应用于大数据处理、实时流处理和数据集成场景。以下是对Kafka的详细解释: 1. **概念理解**: Kafka是由LinkedIn开发并贡献给Apache软件基金会的...

    kafka 技术内幕 图文详解Kafka源码设计与实现

    《Kafka技术内幕》这本书深入剖析了Apache Kafka这一分布式流处理平台的设计原理和实现细节,旨在帮助读者理解Kafka的核心机制,并能...书中的图文详解将使复杂的源码设计变得生动易懂,帮助你更好地掌握Kafka的精髓。

    Kafka3.0详解,客户端命令,核心配置文件详解。spring集成、webflux集成、集群搭建

    Kafka3.0是一个在分布式系统中广泛使用的消息队列系统,主要用于构建实时数据管道和流式应用程序。它的客户端命令以及核心配置文件是其操作的核心,而spring集成和webflux集成则可以将Kafka3.0与主流的Java开发框架...

    Kafka技术内幕:图文详解Kafka源码设计与实现.郑奇煌(2017.11).pdf

    《Kafka技术内幕:图文详解Kafka源码设计与实现》是郑奇煌在2017年11月出版的一本深入解析Apache Kafka的技术专著。这本书详细介绍了Kafka的核心概念、工作原理以及源码分析,旨在帮助读者理解并掌握这个分布式流...

    Kafka详解及常见面试问题解析(值得珍藏)

    Apache Kafka是一种分布式流处理平台,由LinkedIn开发并捐赠给Apache软件基金会。Kafka作为一个消息队列系统,被广泛用于实时数据流处理、日志聚合、用户行为追踪等多个领域。本资料将详细介绍Kafka的核心概念、架构...

    Kafka技术内幕图文详解源码设计与实现

    Kafka自LinkedIn开源以来就以高性能、高吞吐量、分布式的特性著称,本书以0.10版本的源码为基础,深入分析了Kafka的设计与实现,包括生产者... 《Kafka技术内幕 图文详解Kafka源码设计与实现》适合Kafka开发人员阅读。

    Kafka技术内幕:图文详解Kafka源码设计与实现

    《Kafka技术内幕:图文详解Kafka源码设计与实现》这本书由郑奇煌撰写,主要探讨了Apache Kafka这一分布式流处理平台的核心技术与实现原理。Kafka作为大数据处理领域的重要工具,它在实时数据传输、消息队列、日志...

    Kafka配置信息.docx

    Kafka 是一个基于 Publish-Subscribe 模式的分布式消息队列系统,配置信息是 Kafka 集群的核心组件。本文将对 Kafka 配置信息进行详细的解析,帮助读者更好地理解 Kafka 的配置机制。 Broker 配置 Broker 是 Kafka...

    Kafka技术内幕:图文详解Kafka源码设计与实现 高清带书签

    《Kafka技术内幕:图文详解Kafka源码设计与实现》这本书深入剖析了Apache Kafka这一分布式消息系统的内在机制,旨在帮助读者理解Kafka的核心设计理念,掌握其实现方式,并能运用到实际项目中。以下是该书可能涵盖的...

Global site tag (gtag.js) - Google Analytics