kafka入门必备知识
1. Kafka是一个分布式流处理平台:
- 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。
- 可以储存流式的记录,并且有较好的容错性。
- 可以在流式记录产生时就进行处理。
2. 消息系统:
定义
- 将数据从一个应用程序传递到另一个应用程序,通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
- 分布式系统利用消息系统,在多应用之间进行高效、稳定、安全的数据传递。
- 应用场景有跨系统数据传递、高并发流量削峰、数据异步处理。
两种消息模式:
- 点对点:若干个生产和消费者,处理队列当中的数据,一旦该数据被消费,则从队列当中被移除。(多线程:生产消费者模型)
- 发布-订阅:消息是被保留在主题当中,消费者一个消费一个或者若干个主题当中的消息
3. kafka的一些概念
1. 术语:
术语 | 术语 |
---|---|
Topics(主题) | Kafka Cluster(Kafka集群) |
Partition(分区) | Producers(生产者) |
Partition offset(分区偏移) | Consumers(消费者) |
Replicas of partition(分区备份) | Leader(领导者) |
Brokers | Follower(追随者) |
2. 发布和订阅的流程
- 生产者向topic当中提交消息,Brokers将topic当中的数据在对应的分区当中依次保存;
- 消费者向Brokers请求获取消息,Brokers向消费者提供偏移量,消费者根据偏移量要求获取消息。
- 消费者排队的前提,消费者数量大于分区数量
- 同一个消费者组内的消息不会重复消费。
3. 生产者:
主要是消息提供者,根据业务需要往指定的topic推消息,一般也俗称为消息的上游。
4. 消费者:
- 要指定消费者的分组:默认情况下,分组是test
- 消费者可以同时消费若干个topic:
- 消息是已key-value格式进行发送
- 每个key如果重复发送,其偏移量会递增
- 新key的偏移量从0开始
- 消费者要放在一个独立的线程当中,才能始终处于消费状态
- Spring是没有办法直接给线程当中进行依赖注入的
- 消费者的线程如果要通知其他的任务执行,需要从Spring的bean当中获取相关的业务对象
5. kafka写消息的路由策略
- 如果指定分区:直接使用分区进行路由
- 指定了key,但是没有指定分区,那么会对key进行hash运算,通过运算的值得到一个分区
- 如果都没指定,那么会轮询写入一个分区
6. kafka写硬盘:
- 传统写硬盘是随机写
- kafka是顺序写硬盘,是随机写硬盘速度的6000倍
- 写数据的流程
- 首先找到leader
- 将消息写入leader的日志文件
- Followers(包含ISR中的成员,也包含不在ISR中的成员)会同步leader当中的消息,同步完以后会向leader发送一个ACK确认。
- leader在接收到isr所有成员的ACK确认后,正式提交commit保存
7. kafka的消息安全策略:
- 默认是保证一定成功(同步)
- 不重复发送,不保证成功(异步)
8. kafka的备份:
- 备份是由分区来创建的
- 一个分区有1个leader和0-n个follower,只要leader不宕机,所有的follower都宕机了也不影响读写。follower只负责数据备份,不负责数据读写。
9. Kafka的isr:
- 同步备份:保证isr集合当中至少存活一个,如果leader不挂,正常提供服务,如果leader挂了,重新选leader然后提供服务;每个分区都有自己的isr
1. 备份的算法:
1. 分区:分区编号,取余代理数量 (p_i mod b_num)
2. 备份:分区编号 + 备份编号之和, 取余 代理数量(p_i+r_j) mod b_num- 判定存活:配置延时replica.log.max.messages,replica.log.time.max.ms来判定是否宕机
- kafka如何解决zookeeper的压力的
- Kafka有容器机制
- 每一个代理会创建一个新的容器
- 容器负责维护leader的读写,和选举
- leader是在zk上竞争创建节点来获取leader资格,如果leader宕机,选举策略是所有的follower(ISR当中保存的成员)重新竞争创建节点,获取leader资格;容器会记录新的leader,并保持
- 如果所有的ISR成员都死亡:
- 等待ISR成员任意一个苏醒,但是这个过程是不可控的
- 默认:只要有一个不是isr的成员存活,把这个作为新的leader。但是并不能保证这个成员是否数据和原本leader数据一致。
10. kafka的数据保存:
- Kafka的日志分为两种,一种是运行日志;还有一种是用于保存消息的日志;
- 一个分区对应日志当中的一个目录
- 索引文件
- 数据文件
- 数据长度
- 数据类型
- 时间戳
- 偏移量
- Key
- Value
- 头信息
- 数据保留策略
- 时间:
- 大小:
- 注意:清理数据对kafka的读写没有任何影响
- Kafka是在硬盘磁道上进行顺序读写,所以性能和文件大小没有任何关系
11. topic的创建和删除流程:
- 创建topic,是首先获取代理的ids,然后将这些ids组成一个isr,作为一个新的容器
- 删除topic:
1. 默认情况下delete.topic.enable=false;也就是被删除的节点会被移入zk的这个节点/admin/delete_topics
2. 要彻底删除
- delete.topic.enable=true:一旦删除,容器会清空在/admin/delete_topics节点上的监听
- auto.create.topics.enable=false:自动创建主题,如果他为true,那么只要还有一个用户在往这个主题当中写消息,这个主题就不会真正被删除。即便是你已经删了,他依然还会创建一个出来。
kafka入门必备知识的更多相关文章
- Python 基础:入门必备知识
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:程序员野客 先看下咱们的基础目录1 标识符2 关键字3 引号4 编码5 ...
- 浅谈JavaWEB入门必备知识之Servlet入门案例详解
工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...
- Flum入门必备知识
1.flume概念 flume是分布式的,可靠的,高可用的,用于对不同来源的大量的日志数据进行有效收集.聚集和移动,并以集中式的数据存储的系统. flume目前是apache的一个顶级项目. flum ...
- python入门必备知识总结
人生苦短,我用python.看图说话 一.python简介与发展: python 是一种面向对象的解释性计算机程序设计语言. python由荷兰人Guido van Rossum 于1989年发明. ...
- mssql-sqlserver入门必备知识收集
一.了解SQL 数据库的应用场景 sql 简介 二. 检索数据 SELECT语句 检索单个.多及所有列的方法分享 检索不同的值 限制结果 sqlserver注释编写方法 三.排序检索数据 ...
- Python基础入门必备知识
1 标识符标识符是编程时使用的名字,用于给变量.函数.语句块等命名,Python 中标识符由字母.数字.下划线组成,不能以数字开头,区分大小写. 以下划线开头的标识符有特殊含义,单下划线开头的标识符, ...
- c语言编程基础入门必备知识
数据类型 基本数据类型 类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数long long存放有符号整数float单 ...
- 零基础学习C语言入门必备知识
今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...
- Grid – 入门必备!简单易懂的响应式设计指南
如今,人们使用各种各样的移动设备访问网页,设计师们需要去适配不同的屏幕,让用户在都能有最佳的浏览体验.Grid 是一个简单的响应式设计指南,按照这些简单的步骤,你的就能够掌握基础的响应网页设计技巧. ...
- 【入门必备】最佳的 Node.js 学习教程和资料书籍
Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...
随机推荐
- python数据类型、变量以及编码和字符串、格式化
1.数据类型包括整型.浮点型.字符串.布尔型. 整数如果位数太多可以用_隔开,浮点数可以用科学记数法表示,字符串要用单引号或者双引号括起来,布尔型的值只能为True和False 2.变量可以由数字.字 ...
- 实时分布式低延迟OLAP数据库Apache Pinot探索实操
@ 目录 概述 定义 特性 何时使用 部署 Local安装 快速启动 手动设置集群 Docker安装 快速启动 手动启动集群 Docker Compose 实操 批导入数据 流式导入数据 概述 定义 ...
- Java中方法的定义和使用
方法的定义和使用 注意事项: 1.方法与方法之间是 平级关系 不可以嵌套定义 2.方法的位置 可以在类{}中任意位置 3.方法定义之后 之后被调用 才能被执行 4.return 关键字的作用 返回关 ...
- 即时通讯系统为什么选择GaussDB(for Redis)?
摘要:如果你需要一款稳定可靠的高性能企业级KV数据库,不妨试试GaussDB(for Redis). 每当网络上爆出热点新闻,混迹于各个社交媒体的小伙伴们全都开启了讨论模式.一条消息的产生是如何在群聊 ...
- LDAP数据过滤问题
集成ldap同步用户遇到的问题: 首先说明同步需求: 业务需要只同步 objectClass 类型为user的用户 连接ldap查询用户的时候 过滤器只加了 .where("objectCl ...
- Vue+echarts实现中国地图射线效果
效果图如上 前提是安装Echarts并引入 并且配置中国地图json文件这些都在同账号另一篇博客上有说明,查看请自行移步 下展示代码 <template> <div class=&q ...
- P1014 [NOIP1999 普及组] Cantor 表
题目链接:https://www.luogu.com.cn/problem/P1014 有理数可枚举 In 1873 Cantor proved the rational numbers counta ...
- abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之上(六十三)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...
- 数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)
好家伙,写大作业,本篇为代码的思路讲解 1.大作业要求 走迷宫程序 问题描述: 以一个 m * n 的长方阵表示迷宫, 0和1分别表示迷宫的通路和障碍. 设计一个程序, 对任意设定的迷宫, 求出一 ...
- 2022-07-24:以下go语言代码输出什么?A:[]int{};B:[]int(nil);C:panic;D:编译错误。 package main import ( “fmt“ ) f
2022-07-24:以下go语言代码输出什么?A:[]int{}:B:[]int(nil):C:panic:D:编译错误. package main import ( "fmt" ...