基本架构

Kafka分布式消息队列的作用:

解耦:将消息生产阶段和处理阶段拆分开,两个阶段互相独立各自实现自己的处理逻辑,通过Kafka提供的消息写入和消费接口实现对消息的连接处理。降低开发复杂度,提高系统稳定性。

高吞吐率:kafka通过顺序读写磁盘提供可以和内存随机读写相匹敌的读写速度,灵活的客户端API设计,利用Linux操作系统提供“零拷贝”特性减少消息网络传输时间,提供端到端的消息压缩传输,对同一主题下的消息采用分区存储。  kafka通过诸多良好的特性利用廉价的机器就可以实现高吞吐率。

高容错、高可用:kafka允许用户对分区配置多副本,kafka将副本均匀地分配到名broker存储,保证同现代战争分区的副本不会在同一台机器上存储(集群模式下),多副本之间采用leader-follower机制同步消息,只有leader对外提供读写服务,当leader意外失败、broker进程关闭、服务pdsm等情况导致数据不可用时,kafka会从Follower中选择一个Leader继续提供读写服务。

可扩展:理论上Kafka的性能随着Broker的增多而增加,增加一个Broker只需要为新增加的Broker设置一个唯一编号,编写好配置文件后,Kafka通过Zookeeper就能发现新的Broker。

峰值处理:例如秒杀系统、双十一等促销活动的爆发式集中支付系统、推荐系统等都需要消息队列的介入,这类系统在某个时间点数据爆发式增长,后台处理系统不能够及时处理峰值请求,如果没有消息队列的介入就会千万后台系统处理不及时,请求数据严重挤压,如此恶性循环最终导致系统崩溃。Kafka的接入能够使数据进行冗余存储,并保证消息顺序读写,相当于给系统接入了一个大的缓冲区,既能接收持续暴增的请求,又能根据后台系统的处理能力提供数据服务,进而提高各业务系统的峰值处理能力。

kafka的架构如下:

Broker:启动kafka的一个实例就是一个broker,默认端口9092。一个kafka集群可以启动多个broker同时对外提供服务,borker不保存任何producer和consumer相关的信息。

Topic:主题,kafka中同一种类型数据集的名称,相当于数据库中的表,producer将同一类型的数据写入同一个topic下,consumer从同一个topic消费同一类型的数据。逻辑上同一个数据集只有一个topic,如果设置一个topic有多个

partition和多个partition,在物理上同一个topic下的数据集会被分成多份存储到不同的物理机上。

Partition:分区,一个topic可以设置多个分区,相当于反一个数据集分成多份分别放到不同的分区中存储。一个topic可以有一个或者多个分区,在创建topic的时候可以设置topic的partition数,如果不设置默认为1.理论上partiion数据越多,系统的整体吞吐率就越高,但是在实际应用中并不是partiition越多越好,反而过多的partition在broker宕机需要重新对partition选主,在这个过程中耗时太久会导致partition暂时无法提供服务,千万写入消息失败。分区命名规则是topicname-index(比如testtopic-0、testtopic-2等)。

Segment:段文件,kafka中最小数据存储单位,kafka可以存储多个topic,各个topic之间隔离没有影响,一个topic包含一个或者多个partition,每个partition在物理结构上是一个文件夹,文件夹名称以topic名称加partition索引的方式命名,一个partition包含多个segment,每个segment以message在partition中的起始偏移量命名以log结尾的文件,producer向topic中发布消息会被顺序写入对应的segment文件中。kafka为了提高写入和查询速度,在partition文件夹下每一个segment log文件都有一个同名的索引文件,索引文件以index结尾。

Offset:消息在分区中偏移量,用来在分区中唯一地标识这个消息。

Replication:副本,一个partition可以设置一个或者多个副本,副本主要保证系统能够持续不丢失地对外提供服务。在创建topic的时候可以设置partition的replication数。

Producer:消息生产者,负责向kafka中发布消息。

Consumer Group:消费者所属组,一个consumer group可以包含一个或者多个consumer,当一个topic被一个consumer group消费的时候,consumer group内只能有一个consumer消费同一条消息,不会再现同一个consumer group

中多个consumer同时消费一条消息千万一个消息被一个consumer group 消费多次的情况。

Consumer:消息消费者,consumer从kafka指定的主题中拉取消息,如果一个topic有多个分区,kafka只能保证一个分区内消息的有序性,在不同的分区之间无法保证。

Zookeeper:Zookeeper在kafka集群中主要用于协调管理,主要作用:

1)kafka将元数据信息保存在Zookeeper中。

2)通过Zookeeper的协调管理来实现整个kafka集群的动态扩展。

3)实现整个集群的负载均衡。

4)producer通过 Zookeeper感知partition的Leader。

5)Consumer消费的负载均衡。

6)保存consumer消费的状态信息。

Kafka0.9版本之前Consumer消费消息的偏移量记录在Zookeeper中,0.9版本之后 则由kafka自己维护consumer消费消息的偏移量。

摘自《企业大数据处理》

Kafka分布式消息队列的更多相关文章

  1. 【转】快速理解Kafka分布式消息队列框架

     from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...

  2. Kafka 分布式消息队列介绍

    Kafka 分布式消息队列 类似产品有JBoss.MQ 一.由Linkedln 开源,使用scala开发,有如下几个特点: (1)高吞吐 (2)分布式 (3)支持多语言客户端 (C++.Java) 二 ...

  3. 快速理解Kafka分布式消息队列框架

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ ==是什么 == 简单的说,K ...

  4. kafka分布式消息队列介绍以及集群安装

    简介 首先简单说下对kafka的理解: 1.kafka是一个分布式的消息缓存系统: 2.kafka集群中的服务器节点都被称作broker 3.kafka的客户端分为:一是producer(消息生产者) ...

  5. [转载] 快速理解Kafka分布式消息队列框架

    转载自http://blog.csdn.net/xiaolang85/article/details/18048631 ==是什么 == 简单的说,Kafka是由Linkedin开发的一个分布式的消息 ...

  6. kafka分布式消息队列 — 基本概念介绍

    [http://www.inter12.org/archives/818] 这个应该算是之前比较火热的词了,一直没时间抽出来看看.一个新东西出来,肯定是为了解决某些问题,不然不会有它的市场.先简单看下 ...

  7. Apache Kafka 分布式消息队列中间件安装与配置 转载

    bin/zkServer.sh start /home/guym/down/kafka_2.8.0-0.8.0/config/zookeeper.properties& bin/kafka-s ...

  8. 在Centos 7上安装配置 Apche Kafka 分布式消息系统集群

    Apache Kafka是一种颇受欢迎的分布式消息代理系统,旨在有效地处理大量的实时数据.Kafka集群不仅具有高度可扩展性和容错性,而且与其他消息代理(如ActiveMQ和RabbitMQ)相比,还 ...

  9. 分布式消息队列 Kafka

    分布式消息队列 Kafka 2016-02-25 杜亦舒 Kafka是一个高吞吐量的.分布式的消息系统,由Linkedin开发,开发语言为scala具有高吞吐.可扩展.分布式等特点 适用场景 活动数据 ...

随机推荐

  1. Emote木马分析

    前言:网上找的样本是EXE的,没有邮件样本,所以只做了exe分析. 一.Emote木马相关信息 文件: C:\Users\Desktop\Samp.exe 大小: 249856 bytes 文件版本: ...

  2. windows系统开启虚拟化

    电脑如何开启虚拟进化 当VMware安装系统时,如果电脑没有开启虚拟化,在安装过程中,会发生错误. 查看电脑是否开启虚拟化,[任务管理器] 正常情况如上图,而当虚拟化没有开启的时候,如何解决? int ...

  3. KVO的使用二:常用方法及小技巧

    (文章及代码接上一篇) options详解: KVO的注册方法中有一个options枚举,用来确定观察者的接收消息方法接收的信息,那么具体有什么关联呢?下面通过一段代码来验证是如何关联的.依次选择op ...

  4. 【mac微信小助手】WeChatPlugin使用教程!

    微信小助手 mac版集微信防撤回和微信多开等诸多功能于一身,可以有效的阻止朋友微信撤回消息,还能开启无手机验证登录,再也不用每次登录扫码验证啦,非常方便!   wechatplugin mac版安装教 ...

  5. Linux coredump解决流程

    一.打开core文件限制 a.sudo vi /etc/profile b.文件末尾添加ulimit -c unlimited source /etc/profile 把文件重新加载到内存 c.roo ...

  6. windows微信双开

    下面的代码写到xxx.bat文件中 @echo off start /d "D:\software\WeChat\" WeChat.exe start /d "D:\so ...

  7. redhat7 配置使用centos的yum源

    新安装了redhat7.安装后,登录系统,使用yum update 更新系统.提示: This system is not registered to Red Hat Subscription Man ...

  8. Android5.0新特性之——控件移动动画(初级)

    最近开发,UI大牛们设计了好多很炫酷吊炸天的动画,不由得重新学习了一下5.0的ObjectAnimator动画. ObjectAnimator动画的原理,通过反射控件的setXXX方法,改变控件的实际 ...

  9. Nuget安装包

    Selenium.WebDriver Selenium.WebDriver.ChromeDriver Selenium.Firefox.WebDriver Selenium.WebDriver.IED ...

  10. C#操作Control异步工具类

    /// <summary> /// 异步工具类 /// </summary> public class TaskTools { /// <summary> /// ...