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) ...
随机推荐
- rsa 签名 加密解密
A->B 签名 ==========================A方+A方的私钥 => B收到后 用A方的公钥 验证签名 ==========================A-> ...
- oss文件删除策略
当你想删除oss服务中某个bucket下的文件夹时,文件夹中又包含了太多文件,递归删除太过耗时,又必须删除时,此时就要用oss的文件删除策略,如下所示: OSSClient client = new ...
- preparestatement可以避免注入
之所以PreparedStatement能防止注入,是因为它把单引号转义了,变成了\',这样一来,就无法截断SQL语句,进而无法拼接SQL语句,基本上没有办法注入了. 不使用这个,我们一般做查询或更新 ...
- 关于js实现分页效果的简单代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 【XLL 框架库函数】 TempActiveColumn/TempActiveColumn12
创建一个包含所有激活工作表列的 XLOPER/XLOPER12 LPXLOPER TempActiveColumn(BYTE col); LPXLOPER12 TempActiveColumn12(C ...
- C#的XML序列化及反序列化
webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...
- java学习第四天 类和变量
java也属于面向对象的编程 面向对象的三大特征: 封装 继承 多态 类 对象 对象:真实存在的唯一的事物 面向对象编程(oop)思想力图使对计算机语言中的事物的描述和自然界中的事物尽可能保持一致 ...
- Rest(表述性状态转移)
本文的主要内容有: 1.了解Rest 2.了解RESTful WebService 3.使用SpringMvc实现RESTful ------------------------------我是华丽的 ...
- hive 表分区操作
hive的数据查询一般会扫描整个表,当表数据太大时,就会消耗些时间,有时候我们只需要对部分数据感兴趣,所以hive引入了分区的概念 hive的表分区区别于一般的分布式分区(hash分区,范围分区 ...
- 铁区MES部分页面展示
激活码: 76231722-2e7554593-b750-07e2f4844531 TIP: 若您激活不成功,可能是因为您所安装的软件版本较低,请尝试以下激活码 激活码: RXWY-A25421-K5 ...