简介

  • kafka主要用于实现低延迟的发送和收集大量的事件和日志数据--通常是活跃的数据(PV、访问记录等),数据以日志形式记录下来,然后由一个专门的系统来进行日志的收集与统计;
  • 吞吐量极高的分布式消息系统,典型的发布订阅模式系统;
  • kafka集群,没有中心节点的概念,可以在不做任何配置修改的情况下添加和删除服务器,同样,消息的生产者、消费者可以随意重启、上下线;

Broker注册

  • Broker是分布式部署,且相互独立,通过注册系统ZooKeeper综合管理,ZooKeeper上Broker服务器列表记录节点路径:/brokers/ids,Broker启动时会到ZooKeeper注册,创建属于自己的节点:/broker/ids/[0...N],将自己的IP地址和端口信息写入该节点中;
  • Broker创建的节点为临时节点,一旦Broker服务器宕机or下线,对应的Broker节点会被删除,因此可以通过ZooKeeper上的Broker节点的变化情况来动态表征Broker服务器的可用性;

Topic注册

  • kafka中,同一个Topic消息凤城多个分区并分布到多个Broker上,这些分区信息与Broker的对应关系由ZooKeeper维护,对应节点:/brokers/topics,每一个Topic,都会有节点:/brokers/topics/[topic],如:/brokers/topics/loginlogs;
  • Broker服务启动后,会到对应的Topic节点下注册自己的Broker ID,并写入针对该Topic的分区总数,如:/brokers/topics/loginlogs/3 ->2,表明Broker ID为3的一个Broker服务器,对于loginlogs这个Topic消息,提供了2个分区进行消息存储。同样,这个分区书节点也是临时的;

生产者负载均衡

  • 生产者需要合理的发送消息到分布式的Broker上,所以面临生产者负载均衡的问题。
  • kafka支持传统的四层负载均衡,同时支持使用ZooKeeper来实现负载均衡。
  1. 四层负载均衡

  此方案设计教简单,根据生产者的IP与端口来为其确定一个关联的Broker,通常一个生产者只会对应一个Broker,该生产者所有消息都发送给该Broker。此方案设计简单,不需要引入其他第三方系统,同时生产者不需要同其他系统建立额外的TCP连接,只需要维护和Broker的单个TCP链接即可

  弊端很明显,无法做到真正的负载均衡,实际运行中,每个生产者生成的消息量,以及每个Broker的消息存储量都不一样,导致不同Broker接收到的消息不均匀。另方面,生产者也无法感知到Broker的新增与删除,因此,该方案无法做到动态的负载均衡。

  2. 使用ZooKeeper进行负载均衡

  kafka中,客户端使用了基于ZooKeeper的负载均衡策略来解决生产者的负载均衡问题。前面介绍,每当Broker启动时,会首先完成Broker的注册过程,并注册一些“有哪些可订阅的Topic” 的元数据信息。

  kafka的生产者会对ZooKeeper上的以下事件注册Watcher监听,来实现一种动态的负载均衡机制:

    Broker的新增与减少

    Topic的新增与减少

    Broker与Topic关联关系的变化

消费者负载均衡

  与生产者类似,消费者也需要进行负载均衡来实现多个消费者合理的从对应的Broker服务器上接受消息。每一条消息都会发送给分组中的一个消费者,即同一个消费者分组内部的消息消费策略。

  • 消息分区与消费者关系

  每个消费者分组,都会有唯一的Group ID,每个消费者也有唯一的Consumer ID,通常为‘Hostname:UUID’;

  kafka设计规定,每个消息分区有且只能同时有一个消费者对其进行消息的消费,因此需要在ZooKeeper上记录下消息分区与消费者之间的关系;

  消费者确定了对一个消息分区的消费权利,需将其Customer ID写入对应的消息分区的临时节点上,如:/consumers/[group_id]/owns/[topic]/[broker_id-partition_id],broker_id-partition_id为一个消息的分区标识,节点内容即该分区对应的消费者Consumer ID;

  • 消息消费进度Offset记录

  节点路径:/consumers/[group_id]/offsets/[topic]/[broker_id-partitiion_id],节点内容即Offset的值;以便该消费者重启或其他消费者接管该消息分区后,能够从之前的进度继续开始

  • 消费者注册

  1. 注册到消费者分组

    消息者服务启动,会注册:/consumers/[group_id]/ids/[consumers_id],节点创建完后,会将自己订阅的Topic信息写入该节点,此节点也为临时节点;

  2. 对消费者分组中消费者的变化注册监听

    对/consumers/[group_id]ids节点注册子节点变化的watcher监听,一旦发现消费者新增减少,就会触发消费者的负载均衡;

  3. 对Broker服务器的变化注册监听

    对/brokers/ids/[0...N]中节点注册监听,Broker服务器发生变化,根据情况决定是否进行消费者负载均衡;

  4.  进行消费者负载均衡

    

kafka模块概述的更多相关文章

  1. XAF-通知模块概述 web+win

    通知模块概述 1.支持 WinForms和ASP.NET程序. 2.支持调度模块或自定义业务对象. 3.功能:在指定的时间,弹出一个窗口,用户可以查看提醒.也可以取消或推迟. 如需演示项目的源码,可以 ...

  2. spark概念、编程模型和模块概述

    http://blog.csdn.net/pipisorry/article/details/50931274 spark基本概念 Spark一种与 Hadoop 相似的通用的集群计算框架,通过将大量 ...

  3. Kafka之概述

    Kafka之概述 一.消息队列内部实现原理 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消 ...

  4. ASP.NET Core模块概述

    原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...

  5. Spark Streaming 实现思路与模块概述

    一.基于 Spark 做 Spark Streaming 的思路 Spark Streaming 与 Spark Core 的关系可以用下面的经典部件图来表述: 在本节,我们先探讨一下基于 Spark ...

  6. [02] Spring主要功能模块概述

    1.Spring主要功能模块   1.1 Core Container Spring的核心容器模块,其中包括: Beans Core Context SpEL Beans和Core模块,是框架的基础部 ...

  7. ASP.NET Core Module overview模块概述

    原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...

  8. openstack七大模块概述

    前言 OpenStack主要由七部分组成,分别是Identify, Image, Network, Compute, Block Storage, Object Storage, Dashboard, ...

  9. 4.2、Libgdx每个模块概述

    (原版的:http://www.libgdx.cn/topic/34/4-2-libgdx%E5%90%84%E4%B8%AA%E6%A8%A1%E5%9D%97%E6%A6%82%E8%A7%88) ...

随机推荐

  1. C#高级编程笔记 Delegate 的粗浅理解 2016年9月 13日

    Delegate [重中之重] 委托 定义一:(参考)http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html 完全可 ...

  2. bzoj3551 Peaks加强版

    这个题--感觉离线和在线的代码难度差不多(pb_ds不要说话). 离线的话,就是把所有询问按照w排个序,然后一边Kruskal+平衡树启发式合并一边回答询问就好了. 在线也不难写.首先Kruskal重 ...

  3. struts2 自定义校验规则

    自定义校验规则:(了解) 在Struts2自定义校验规则: 1.实现一个Validator 接口. 2.一般开发中继承ValidatorSupport 或者 FieldValidatorSupport ...

  4. WPF CollectionViewSource CollectionView

    CollectionView 通俗讲就是可以对你绑定的集合可以进行 分组,排序 等功能 CollectionViewSource  根据字面意思是xxx的数据源 详细的介绍还是看 http://www ...

  5. ABAP 分货日报表

    *&---------------------------------------------------------------------* *& Report  ZSDR031 ...

  6. jqueyr eq get用法

    相信大部份人都会把这2个的用法搞错.仔细查看下API文档就可以知道.eq返回的是一个jquery对象,get返回的是一个html 对象数组.举个例子: <p style="color: ...

  7. artdialog

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  8. MyEclipse2015配置Tomcat方法----》myeclipse2015

    1.打开Myeclipse2015,进入偏好设置window-perference,找到下图箭头指向的地方 2.点击Add按钮进入下面界面 3.点击next进入下面界面 4.选择tomat  选择JR ...

  9. UItableview 添加 uisearchController

    @property (nonatomic, strong) UISearchController* searchController; self.searchController = [[UISear ...

  10. hdu 3746 Cyclic Nacklace

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 思路:KMP中Next数组的应用,求出最小的循环节,题目的意思是只能在字符串的后面上添加新的字符 ...