目录

Kafka介绍

一、 Kafka的特性:

二、Kafka的使用场景

三、Kafka 生产者-消费者

四、Consumer与Partition的关系

五、Kafka 与 Zookeeper


一、Kafka介绍

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

二、Kafka的特性

- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

- 可扩展性:kafka集群支持热扩展

- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

- 高并发:支持数千个客户端同时读写

2.1 broker在zk中注册

kafka的每个broker(相当于一个节点,相当于一个机器)在启动时,都会在zk中注册,告诉zk其brokerid,在整个的集群中,broker.id/brokers/ids,当节点失效时,zk就会删除该节点,就很方便的监控整个集群broker的变化,及时调整负载均衡。

2.2 topic在zk中注册

在kafka中可以定义很多个topic,每个topic又被分为很多个分区。一般情况下,每个分区独立在存在一个broker上,所有的这些topic和broker的对应关系都有zk进行维护

2.3 consumer(消费者)在zk中注册

2.3.1     注册新的消费者,当有新的消费者注册到zk中,zk会创建专用的节点来保存相关信息,路径ls /consumers/{group_id}/  [ids,owners,offset],Ids:记录该消费分组有几个正在消费的消费者,Owmners:记录该消费分组消费的topic信息,Offset:记录topic每个分区中的每个offset

2.3.2     监听消费者分组中消费者的变化 ,监听/consumers/{group_id}/ids的子节点的变化,一旦发现消费者新增或者减少及时调整消费者的负载均衡。

三、Kafka的使用场景

- 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

- 消息系统:解耦和生产者和消费者、缓存消息等。

- 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

- 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

- 流式处理:比如spark streaming和storm

- 事件源

四、Kafka 生产者-消费者

消息系统通常都会由生产者,消费者,Broker三大部分组成,生产者会将消息写入到Broker,消费者会从Broker中读取出消息,不同的MQ实现的Broker实现会有所不同,不过Broker的本质都是要负责将消息落地到服务端的存储系统中。具体步骤如下:

  1. 生产者客户端应用程序产生消息:

    1. 客户端连接对象将消息包装到请求中发送到服务端

    2. 服务端的入口也有一个连接对象负责接收请求,并将消息以文件的形式存储起来

    3. 服务端返回响应结果给生产者客户端

  2. 消费者客户端应用程序消费消息:

    1. 客户端连接对象将消费信息也包装到请求中发送给服务端

    2. 服务端从文件存储系统中取出消息

    3. 服务端返回响应结果给消费者客户端

    4. 客户端将响应结果还原成消息并开始处理消息

五、Consumer与Partition的关系

- 如果consumer比partition多,是浪费,因为kafka的设计是在一个partition上是不允许并发的,所以consumer数不要大于partition数

- 如果consumer比partition少,一个consumer会对应于多个partitions,这里主要合理分配consumer数和partition数,否则会导致partition里面的数据被取的不均匀

- 如果consumer从多个partition读到数据,不保证数据间的顺序性,kafka只保证在一个partition上数据是有序的,但多个partition,根据你读的顺序会有不同

- 增减consumer,broker,partition会导致rebalance,所以rebalance后consumer对应的partition会发生变化

- High-level接口中获取不到数据的时候是会block的

负载低的情况下可以每个线程消费多个partition。但负载高的情况下,Consumer 线程数最好和Partition数量保持一致。如果还是消费不过来,应该再开 Consumer 进程,进程内线程数同样和分区数一致。

六、Kafka 与 Zookeeper

  • Zookeeper 协调控制

1. 管理broker与consumer的动态加入与离开。(Producer不需要管理,随便一台计算机都可以作为Producer向Kakfa Broker发消息)

2. 触发负载均衡,当broker或consumer加入或离开时会触发负载均衡算法,使得一

个consumer group内的多个consumer的消费负载平衡。(因为一个comsumer消费一个或多个partition,一个partition只能被一个consumer消费)

3.  维护消费关系及每个partition的消费信息。

  • Zookeeper上的细节:

1. 每个broker启动后会在zookeeper上注册一个临时的broker registry,包含broker的ip地址和端口号,所存储的topics和partitions信息。

2. 每个consumer启动后会在zookeeper上注册一个临时的consumer registry:包含consumer所属的consumer group以及订阅的topics。

3. 每个consumer group关联一个临时的owner registry和一个持久的offset registry。对于被订阅的每个partition包含一个owner registry,内容为订阅这个partition的consumer id;同时包含一个offset registry,内容为上一次订阅的offset。


中间件系列篇

《Redis篇》——Redis快速入门

《Redis篇》——面试官最喜欢问的Redis知识

《Kafka篇》——Zookeeper搭载kafka消息发布和订阅

《Redis篇》——Redis的三种模式:主从、哨兵、集群

《Redis篇》——使用RedisTemplate对Redis的常用操作

《中间件》——kafka的工作原理解析相关推荐

  1. 【深度学习】谷歌大脑EfficientNet的工作原理解析

    [深度学习]谷歌大脑EfficientNet的工作原理解析 文章目录 1 知识点准备1.1 卷积后通道数目是怎么变多的1.2 EfficientNet 2 结构2.1 方式2.2 MBConv卷积块2 ...

  2. 揭开SAP Fiori编程模型规范里注解的神秘面纱 - @OData.publish工作原理解析

    Jerry的前一篇文章 揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel.readOnly工作原理解析,给大家分享了@ObjectModel.readOnly这个注解对 ...

  3. 2 计算机控制器的组成,组合逻辑控制器组成结构及工作原理解析

    组合逻辑控制器组成结构及工作原理解析 按照控制信号产生的方式不同,控制器分为微程序控制器和组合逻辑控制器两类 微程序控制器是将全部控制信号存贮在控制存储器中. 优点:控制信号的逻辑设计.实现及改动都较 ...

  4. Django基础(33): 中间件(middleware)的工作原理和应用场景举例

    在初级Django开发项目中,你大概率用不到中间件(Middleware).但随着项目需求越来越复杂,你就需要开始编写自己的中间件了.当你了解到Django中间件(middleware)的工作原理和作 ...

  5. 交换机原理_交换机工作原理解析

    原文连接:http://www.elecfans.com/dianzichangshi/20171204593673.html 交换机原理 数据传输基于OSI七层模型,而交换机就工作于其第二层,即数据 ...

  6. 六轴机械臂控制原理图_六轴工业机器人工作原理解析

    原标题:六轴工业机器人工作原理解析 常见的六轴关节机器人的机械结构如图1所示: 六个伺服电机直接通过谐波减速器.同步带轮等驱动六个关节轴的旋转,注意观察一.二.三.四轴的结构,关节一至关节四的驱动电机 ...

  7. Retrofit2 工作原理解析(一)

    Retrofit2 工作原理解析(一) 概述 Retrofit是square公司开源的一款类型安全的http请求框架,用于Java和Android程序.Retrofit可以说是restful风格的一个 ...

  8. MSN,QQ,IP Messenger,飞鸽传书,的工作原理解析

    MSN,QQ,飞鸽传书,的工作原理解析 http://apps.hi.baidu.com/share/detail/14190263 关键字:MSN,QQ,飞鸽传书,IP Messenger,传文件, ...

  9. Django 中间件(middleware)的工作原理和应用场景举例

    在初级Django开发项目中,你大概率用不到中间件(Middleware).但随着项目需求越来越复杂,你就需要开始编写自己的中间件了.当你了解到Django中间件(middleware)的工作原理和作 ...

最新文章

  1. HM16.0之帧间预测——xCheckRDCostInter()函数
  2. hive表信息查询:查看表结构、表操作等--转
  3. 手机当电脑麦克风 linux,WO Mic让手机成为电脑的无线麦克风
  4. 源于十年来的点滴积累——《变革中的思索》印行出版
  5. Java并发编程之并发容器ConcurrentHashMap(JDK1.8)解析
  6. 如何让cloudflare缓存html,CloudFlareCDN页面规则缓存设置教程
  7. 【C语言】创建一个函数,判断某一正整数是否为水仙花数,并调用这个函数找出1000以内所有水仙花数...
  8. 使用管理员账户远程连接WMQ7.5的“AMQ4036”错误
  9. (全过程)如何制作论坛网站,怎样免费制作论坛,制作论坛教程
  10. AutoJs学习-实现图片剪切
  11. Draco嵌入式AI开发板使用手册V0.1.1
  12. BP神经网络的简单应用
  13. 使用kermit串口工具时出现 /dev/ttyS0 is not a terminal device 错误
  14. Excel2010 柱形图与折线图制表
  15. RSH-810微机智能母线电弧光保护装置
  16. 2021年上海市安全员C证考试报名及上海市安全员C证找解析
  17. 最新 955 不加班的公司名单(2022 版)
  18. EasyExcel读写Excel
  19. 高速PCB 设计中终端匹配电阻的放置
  20. Java在Quant应用_GitHub - tigerfintech/tiger_quant: Java 实盘量化框架

热门文章

  1. C#命名规范中文版/C#编码规范中文版
  2. oracle imp 错误604,IMP-00058: 遇到 ORACLE 错误 1461
  3. 什么是LAB和FAB
  4. 初探PLC远程通讯技术
  5. WAF原理及绕过(成功绕过某狗)
  6. 【Qt】main.cpp:1:24: fatal error: QApplication: No such file or directory
  7. UnityShader_足迹沙漠雪地塌陷
  8. 测试绝地求生显卡使用率软件,玩绝地求生需要什么显卡才能流畅运行?10系列显卡吃鸡游戏测试对比...
  9. Android TTS 中文 文字转语音 使用TextToSpeech Svox
  10. TCP/IP协议栈在Linux内核中的运行时序分析【万字长文】