初识Kafka

1.1发布订阅系统

特点:发布者不会直接把消息发送给接收者,这个是发布订阅消息的特点;发布订阅系统一般会有一个broker,也就是发布订阅消息的中心点。
定义:发布者以某种方式对消息进行分类,订阅者订阅他们以便接受待定类型的消息。

图:发布订阅者模型示意图

1.2 Kafka登场

1.2.1消息和批次

Kafka的数据单元称为消息,可以将消息看做数据库中的一个数据行或者一条记录。消息有字节数组组成。消息中可以有一个可选的元数据。键也为一个字节数组,当消息以一种可控的方式写入不同的分区时,会用到键,例如:我们可以用键生成一个一致性的散列值,然后使用散列值对主题分区数进行取模,为消息选取分区。(具体用法后面会详细介绍)

1.2.2模式

由于Kafka的消息是由字节数组组成的。所以根据应用程序的需求,消息模式有许多可用的选项(例如JSON或者XML)。但是JSON等缺乏强类型的处理能力,不同版本之间兼容性也不是很好,可以选用Apache Avro,一款由Hadoop开发的序列化框架。
数据格式对于Kafka很重要,消除了消息读写操作之间的耦合性。若需升级:则需要先将订阅者进行升级,然后发布者接着进行升级。以便使用新的数据格式。

1.2.3主题和分区

Kafka的消息通过主键进行分类。主题好比数据库中的表,或者为文件系统中的文件夹。主题可以被分为若干个分区,一个分区就是一个提交日志,消息以追加的方式写入分区,然后以先入先出的顺序进行读取。但是一个主题可能会包含几个分区,因此无法在整个主题范围内保证消息的顺序。
Kafka通过分区(Partition)来实现数据冗余以及伸缩性。分区可以分步在不同的服务器上,也就是说,一个主题可以横跨多个服务器,可以来提供比单个服务器更强大的性能。

图:包含多个分区的主题
我们也可以用来描述Kafka这类系统的数据。流为一组从生产者移动到消费者的数据。

1.2.4生产者和消费者

Kafka的客户端就是Kafka系统的用户,被分为生产者消费者以及用户数据继承的Kafka Connect API和用于流式处理的Kafka Streams
生产者创建消息,一般情况下一个消息会发布到一个特定的主题下。生产者会默认情况下将消息均衡的分步到主题的所有分区上,而并不关心特定消息会写到那个分区。我们可以通过消息键以及分区器来实现吧消息写在指定的分区,分区器为键生成一个散列值,并将其映射到制定的分区上,这样可以保证包含同一个键的消息会被写到同一个分区上。
消费者读取消息,消费者订阅一个或者多个主题,并按照消息生成的顺序进行读取。消费者通过检查偏移量来区别已经读取过的消息。偏移量是另一种元数据,他是一个不断递增的整数值,在创建消息时,Kafka会把他添加到消息中,在给定的分区中,每个消息的偏移量都是唯一的。偏移量会保存在zookeeper中或者Kafka上,如果消费者关闭或者重启,他的读取状态不会丢失。
消费者是消费者群组的一部分,会有一个多个消费者共同读取一个主题,群组保证每个分区只能被一个消费者使用。消费者与分区之间的映射通常被称为消费者对分区的所有权关系
如果一个消费者失效,群组里的其他消费者可以接管失效消费者的工作。

图:消费者群组从主题读取消息

1.2.5 broker和集群

一个独立的Kafka服务器被称为broker。broker接收来自生产者的消息,为消息设置偏移量,并提交到磁盘中保存。每个broker都可以处理数千个分区以及每秒百万级的消息量。
broker是集群的组成部分。每个集群都有一个broker同时充当了集群控制器的角色,此角色是自动从集群活跃成员中选举出来的。控制器负责管理工作,包括将分区分配给broker和监控broker。
在集群中,一个分区从属于一个broker,该broker被称为分区的首领。一个分区分配给多个broker,这时候会发生分区复制。这种复制机制为分区提供了消息冗余,如果有一个broker失效,则其他的broker就可以接管领导员,这时相关的消费者以及生产者都需要重新连接新的首领。

消息的保留:Kafka的消息有默认的消息保存策略,要么保留一定的时间,或者保留到一定大小的字节数。当消息达到这个上限时,旧消息就会过期并删除。主题可以设置自己的保存策略。可以将消息保留到不再使用他们为止。

1.2.6多集群

随着Kafka部署数量的增加,基于以下几点原因,最好使用多个集群。

  • 数据类型的分离
  • 安全需求隔离
  • 多数据中心(灾难恢复)
    Kafka提供MirrorMaker,此工具可以用它实现集群间的消息复制(由于Kafka的消息复制机制只能在单个的集群中进行),MirrorMaker的核心组件包含了一个生产者以及一个消费者。两者之间通过一个队列相连。消费者从一个集群读取消息,生产者把消息发送到另一个集群上。如下图所示,两个本地集群将信息集合到一个聚合集群上。

    图:多数据中心架构

1.3Kafka的优点

1.3.1多个生产者

可以支持多个生产者,不管客户端在使用单个还是多个主题,并以统一的消息格式对外提供数据。

1.3.2多个消费者

支持多个消费者从一个单独的信息流上读取数据,并且互相不影响。多个消费者可以组成一个群组,共享一个消息流,保证整个群组对于每个给定的消息只能处理一次。

1.3.3基于磁盘的数据存储

可以支持消费者非实时的读取消息,并且可以保证数据不被丢失。

1.3.4伸缩性

可以在开发时用单个的broker,在进行扩展成集群。一个包含多个broker的集群,即使个别的broker失效,仍然可以持续的为客户提供服务。

1.3.5高性能

可以保证在处理大量数据的同时,他还能保证亚秒级的消息延时。

1.4数据生态系统


使用场景

  • 活动跟踪
    跟踪用户的活动,例如添加用户资料,这些消息被发送到一个或者多个主题,由后端应用程序进行读取。这样就可以生成报告,为机器学习系统提供数据,或者实现其他的功能。
  • 传递消息
    应用读取消息之后可以进行以下处理:格式化消息;将多个消息放在同一个通知进行发送;根据用户配置的首选项来发送通知。
  • 度量指标以及日志记录
    可以将应用程序的度量指标发送到Kafka上,提供给监控系统或者告警系统服务消息。
  • 提交日志
    可以将数据库的更新日志发布到Kafka上,应用程序通过监控事件流来接收数据库的实施更新。
  • 流处理

参考文献:
《kafka权威指南》人民邮电出版社

Kafka权威指南-学习笔记---第一章相关推荐

  1. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! JavaScript 权威指南-学习笔记 ...

  2. 《Go语言圣经》学习笔记 第一章 Go语言入门

    Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...

  3. 编译原理(龙书)学习笔记 第一章

    编译原理(龙书)学习笔记 第一章 1.1语言处理器 解释器(interpreter) : 编译器(compiler): 一个语言处理系统 练习 1.1.1:编译器和解释器之间的区别 1.1.2:相对优 ...

  4. 小吴的《机器学习 周志华》学习笔记 第一章 绪论

    小吴的<机器学习 周志华>学习笔记 第一章 绪论 近一年时间接触到不少机器学习的知识,虽然断断续续学了一些,总感觉还没有入门(只学会了疯狂调包).因此,最近开始系统学习Machine Le ...

  5. 计算机网络学习笔记---第一章

    计算机网络学习笔记 第一章 文章目录 计算机网络学习笔记 第一章 前言 一.计算机网络的概念 (一)计算机网络的功能 1.数据通信(连通性) 2.资源共享(硬件 软件 数据) 3.分布式处理 (Had ...

  6. 机器人导论(第四版)学习笔记——第一章

    机器人学导论(第四版)学习笔记--第一章 1. 概述 1.1 背景 1.2 操作臂力学和控制 1.3 符号 1. 概述 1.1 背景 工业自动化的发展带来了工业机器人的高速发展.本书聚焦机械臂的力学和 ...

  7. PhalAPI学习笔记 ——— 第一章自定义HelloWorld接口

    PhalAPI学习笔记 --- 第一章自定义HelloWorld接口 前言 自定义接口 项目实例 结果 分布解析 结束语 前言 公司业务需要转学PHP,而PHP中一个功能强大且生态链完整的PHP接口框 ...

  8. Hadoop权威指南学习笔记三

    HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my ...

  9. Hadoop权威指南学习笔记一

    Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...

  10. [go学习笔记.第一章] go可以做什么

    go可以做什么,go有以下三大学习方向: Golang的应用领域 1.区块链应用 区块链技术,简称BT(Blockchain technology),也被称之为分布式账本技术,是一种互联网数据库技术, ...

最新文章

  1. 计算机视觉算法工程师(旷视、商汤、智云、海康)面试总结
  2. Java面试没过_Java面试中遇到的坑【填坑篇】
  3. 能pingt通外部的Ip和dns,但上不了网络
  4. linux下使用TC模拟弱网络环境
  5. JQuery控制只能输入带二位小数的数字
  6. xshell连接虚拟机
  7. NumberFormat去掉千分位
  8. WPS桌面右键新建菜单缺少新建文档入口
  9. 【转】SD和SDHC和SDXC卡的区别
  10. c语言的源程序一行可以书写多个语句,C语言 选择题(最全版)
  11. C语言的fopen()函数
  12. 为何基于树的模型在表格型数据中能优于深度学习?
  13. 穿越NAT的SDWAN技术实现(上)
  14. 2020 BUPT Winter Training #1 Div.1
  15. openfire smack消息回执设置,处理掉包问题
  16. 第一次在公司用git克隆项目办法
  17. luogu 1498 南蛮图腾
  18. 供求弹性小:商品暴涨暴跌之源
  19. 【转】光纤视频收发产品的光模块选型
  20. volatile有什么用?怎么用?是什么?

热门文章

  1. easyui自定义图标
  2. LwIP 协议栈之 udp 协议解析
  3. PLC哪些编程软件可以通用?
  4. 操作系统安全 基本概念
  5. 转 VSS 2005 使用详解
  6. MySQL 学生信息管理系统 表格信息
  7. 电脑故障维修常见的故障整理,电脑小白必备!
  8. windows下7z文件解压
  9. php 论坛回复引用功能,PHPWind商业版论坛功能介绍
  10. discuz 论坛DIY增加{lastposter}最后回复者以及{forumicon}版块图标调用解读