kafka模块概述
简介
- 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来实现负载均衡。
- 四层负载均衡
此方案设计教简单,根据生产者的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模块概述的更多相关文章
- XAF-通知模块概述 web+win
通知模块概述 1.支持 WinForms和ASP.NET程序. 2.支持调度模块或自定义业务对象. 3.功能:在指定的时间,弹出一个窗口,用户可以查看提醒.也可以取消或推迟. 如需演示项目的源码,可以 ...
- spark概念、编程模型和模块概述
http://blog.csdn.net/pipisorry/article/details/50931274 spark基本概念 Spark一种与 Hadoop 相似的通用的集群计算框架,通过将大量 ...
- Kafka之概述
Kafka之概述 一.消息队列内部实现原理 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消 ...
- ASP.NET Core模块概述
原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...
- Spark Streaming 实现思路与模块概述
一.基于 Spark 做 Spark Streaming 的思路 Spark Streaming 与 Spark Core 的关系可以用下面的经典部件图来表述: 在本节,我们先探讨一下基于 Spark ...
- [02] Spring主要功能模块概述
1.Spring主要功能模块 1.1 Core Container Spring的核心容器模块,其中包括: Beans Core Context SpEL Beans和Core模块,是框架的基础部 ...
- ASP.NET Core Module overview模块概述
原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...
- openstack七大模块概述
前言 OpenStack主要由七部分组成,分别是Identify, Image, Network, Compute, Block Storage, Object Storage, Dashboard, ...
- 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) ...
随机推荐
- angular自己最近学的一种筛选方法
投资状态vm.statusList = [ {name:"项目状态",value:-1}, {name:"上线",value:0}, {name:"投 ...
- 常用mysql语句
mysql基本知识:日志文件 =======================================开启/关闭日志修改 /etc/my.cnf #log-bin=mysql-bin #重启my ...
- 《sqoop安装和配置》
参考帖子http://blog.csdn.net/jiedushi/article/details/6663177 http://blog.csdn.net/ww1982_0_0_0/article/ ...
- mysql连结查询
2016年4月13日 18:08:22 星期三 union 会生成临时表, 然后一同取出合并 join 或子查询, 会生成临时表进行嵌套循环 临时表, 缺点就是没有索引
- 在linux中减小和增大LV的过程与思考
今天在安装oracle 11 rac的时候,查看操作系统df -lh,发现/home目录竟然分了500多G,/根目录才有50G,当时我就爆了句粗口,这TM系统是怎么做的. Filesystem ...
- 使用 lsyncd 本地目录实时备份
转自 https://segmentfault.com/a/1190000002737213 2.1安装lsyncd # rpm -ivh http://dl.fedoraproject.org/pu ...
- Android笔记:android的适配
public int Dp2Px(Context context, float dp) { final float scale = context.getResources().getDisplayM ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- 注解:【有连接表的】Hibernate双向1->N关联(仅N端控制关联关系)
Person与Address关联:双向1->N,[有连接表的],N端控制关联关系 Person.java package org.crazyit.app.domain; import java. ...
- 关于SQLSERVER中用SQL语句查询的一些个人理解
作为一个编程菜鸟说真的很难有什么见解,也就是写给一些刚学习编程的人,希望能给他们一些帮助吧! SQLSERVER作为刚开始入门学习的数据库,SQL语句也并不算太难!说白了也就是建库,建表,建约束,对数 ...