【kafka介绍,应用场景及注意事项】
文章目录
- 前言
- 一、kafka是什么?
- 二、基础知识
- 核心概念
- 三、面试问题
- kafka中的消息是否会丢失和重复消费
- 消息发送
- 消息消费
- kafka为什么那么快
- 消费者提交offset提交的是当前消息的offset还是offset+1
- 四、kafka使用场景
- 总结
前言
介绍一些kafka入门知识,及面试常见问题。
一、kafka是什么?
kafka是开源的分布式发布-订阅消息系统,最初由LinkedIn公司开发,后来成为apache项目的一部分,是一个分布式,可划分的,冗余备份的持久性的日志服务,主要处理流式数据。
为了解决消息间通信繁忙诞生,有解耦,异步,消峰的作用,可以理解是一个消息中间件(消息队列),发送方发送消息时,不直接发送接收方,先发送到中间件,接收方通过中间件获取。消费者通过topic主题得到想要的数据,生产者将不同主题的数据发布到中间件,在主题下有分区,分区可以分布在不同的服务器上,生产者将数据存储在主题的不同分区里,生产者产生的数据具体存储到哪里有两种模式,1、通过生产者指定分区,2、一个分区器算法,通过消息的键即一个标记来安排存储空间。所以一个消息抽象点理解带有主题、分区、键、值四个属性。消费者通过偏移量(offset)读取数据,即第几个,一个分区里,每个消息唯一,读取只能顺序读。borker里包含主题,分区,一个borker挂掉后其他borker可以顶替,保证了消息安全性。
二、基础知识
核心概念
producer 消息的生产者
broker 服务器(多个broker构成kafka集群)
topic 主题(消息的不同分类)
partition 分区(分布在多台机器上的broker中)
consumer group 消费者组,可以并行消费topic中的partition消息
customer 消息的消费者
offset 偏移量,第几个的意思,一个分区里,每个消息的偏移量是唯一的,消费者只能顺序读取。
ISR、AR、OSR
ISR 副本同步队列 AR 所有副本 OSR Out-of-Sync Replied 不同步应答 AR = ISR + OSRQPS: Queries Per Second,意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数
TPS:Transactions Per Second,意思是每秒事务数
如果是对一个接口(单场景)压测,且这个接口内部不会再去请求其它接口,那么tps=qps,否则,tps≠qps
消息通过主题、分区、键、值决定去往哪个具体的分区。
分区消息分配规则:平均分配,多余的partition,有偶遇的进行从前往后平均分配。
零拷贝:用户态,内核态,磁盘
原:磁盘->内核buffer->application buffer->socket 内核buffer->网卡
kafka:磁盘->内核buffer->socket 内核buffer ->网卡
三、面试问题
按照面试频率顺序排列
kafka中的消息是否会丢失和重复消费
确定kafka消息丢失和重复,从消息发送和消息消费两个方面分析
消息发送
kafka消息发送有两种方式:同步sync和异步async,默认是同步方式,可通过producer.type属性进行配置,kafka通过配置requeset.required.acks属性来确认消息的生产
- 0 不进行消息接受和确认成功
- 1 当leader接受成功时确认
- -1 leader和follower都接受成功时确认
综上,有6中消息生产的情况,两种同步*三种方式=6 - acks=0,不和kafka集群进行消息接受确认,当网络异常,缓冲区满了等情况时,消息可能丢失
- acks=1 同步模式下,只有leader确认接受成功后,但挂掉了,副本没有同步,数据可能丢失
消息消费
kafka消息消费有两个consumer接口,low-level api和high-leve api
- low-level api 消费者自己维护offset等值,可以实现对kafka的完全控制
- high-level api 封装了对parition和offset的管理,使用简单
如果使用了高级接口high-level pai,当消息消费者从集群中把消息取出来,并提交了新的消息offset后,还没来得及消费就挂掉,那么下次再消费时,之前没消费成功的消息就诡异消失了。
解决办法:
针对消息丢失:
同步模式下,确认机制设置为-1,让消息写入leader和follower之后再确认消息发送成功,
异步模式下,为防止缓冲区满,可以在配置文件设置不限制阻塞超时时间,当缓冲区满时让生产者一直处于阻塞状态。
针对消息重复,将消息的唯一标识保存到外部介质中,每次消息时判断是否处理过即可。
kafka为什么那么快
顺序写,磁盘顺序写比随机写要快,寻址过程消耗时间减少
零拷贝技术
批量处理合并小请求,然后以流的方式进行交互
pull 拉模式,使用拉模式进行消息的获取,与消费端处理能力相符
消费者提交offset提交的是当前消息的offset还是offset+1
offset+1
四、kafka使用场景
kafka使用目的为了异步、消峰、解耦
解耦体现在各个业务方通过topic各自消费
消峰体现在即使有大批量的消息调用不会使系统受到影响,流量由消息队列承载
异步体现在吞吐量大幅度提高,未做真正的实际调用,接口RT(响应时间)会非常低。
例子:
报表系统统计各个商户的业绩,引入kafka,每个用户下单后,推送至kafak,消费者根据消息异步处理数据,将每条数据累加到每个商户的每天的每小时统计数据上。查询时不需要查询所有数据。
总结
以上就是今天要讲的kafka知识,有时还会碰到顺序读写的问题,解决思路其实和其他消息队列,或者批量处理数据思路一样,可以根据业务订单流水号进行取模分片,分片的数据不要有关联性,可以提高消费能力。
【kafka介绍,应用场景及注意事项】相关推荐
- JSON的使用场景及注意事项介绍
上篇我们讲解了JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Douglas Crockford) 和 奇普·莫宁斯达(Chip Mornings ...
- [转]kafka介绍
转自 https://www.cnblogs.com/hei12138/p/7805475.html kafka介绍 1.1. 主要功能 根据官网的介绍,ApacheKafka®是一个分布式流媒体平台 ...
- 微服务 ZooKeeper ,Dubbo ,Kafka 介绍应用
目录 微服务 微服务的优缺点 微服务技术栈 编辑 常见的微服务框架 ZooKeeper 工作原理 ZooKeeper 集中存放管理 ZooKeeper 功能 动物园管理员 ZooKeeper 服务 ...
- 消息队列Kafka介绍
Kafka用来构建实时数据管道和数据流应用.它是水平可扩展的,具有容错性的,极其快速的,并且已应用于上千家公司的产品环境中. 介绍 Apache Kafka是一个分布式流平台[distributed ...
- 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen
算法:详解布隆过滤器的原理.使用场景和注意事项@知乎.Young Chen 什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data struc ...
- 批量提交 kafka_Kafka精华问答|kafka的使用场景是什么?
戳蓝字"CSDN云计算"关注我们哦! Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.作为一种高吞吐量的分布式发布订阅消息系统,有着诸多特 ...
- Kafka精华问答 | kafka的使用场景是什么?
戳蓝字"CSDN云计算"关注我们哦! Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.作为一种高吞吐量的分布式发布订阅消息系统,有着诸多特 ...
- kafka使用_Kafka精华问答 | kafka的使用场景是什么?
戳蓝字"CSDN云计算"关注我们哦! Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.作为一种高吞吐量的分布式发布订阅消息系统,有着诸多特 ...
- 2017-3-11 Kafka的应用场景
标签: 有道云笔记 Kafka的应用场景: 1 消息队列 比起大多数的消息系统来说,Kafka有更好的吞吐量,内置的分区,冗余及容错性,这让Kafka成为了一个很好的大规模消息处理应用的解决方案.消息 ...
- RabbitMq与Kafka的使用场景和区别
这是陈东景于2021年8月29日下午16点原创作品,转载请标明出处!!!! 在进行软件设计的过程中,如果软件设计业务上存在需要短时间内处理大批量的信息,又需要能保证软件能正常运行(保证软件的高可靠和高 ...
最新文章
- java 文件md5校验_Java 获取 文件md5校验码
- 手机经常提示找不到服务器,经常出现找不到服务器是什么原因?什么网也打 – 手机爱问...
- BV-Person: A Large-scale Dataset for Bird-view Person Re-identification
- FusionCharts參数中文说明
- [Swift]LeetCode944. 删除列以使之有序 | Delete Columns to Make Sorted
- 畅享音视频技术饕餮盛宴,就在LiveVideoStackCon 上海站
- JS 判断滚动底部并加载更多效果。。。。。。。。。
- Python3 基础学习笔记 C03【操作列表】
- 华为mate10pro测试软件,华为Mate10和华为Mate10Pro的区别在哪里?华为Mate10和华为Mate10Pro对比测评告诉你(附全文)...
- module.exports与exports,export与export defa
- GBase学习-安装GBase 8a MPP Cluster V95
- ADB命令和Monkey命令
- 无人驾驶网约车营销分析
- 旋转矩阵(维基百科)
- DAO是什么?为什么我们需要DAO?
- 人人影视携2000万用户进军区块链,区块链会流行起来吗?
- 数学建模快速入门(6)二维图和三维图
- 029:vue+openlayers:使用MVT格式读取瓦片数据(示例代码)
- 如何把证件照底色变白?怎样更换电子版证件照底色?
- 用pandas批量分组处理excel数据
热门文章
- 【Spring框架】Spring中的DI介绍
- java字符串长度_Java中String字符串的最大长度?
- 【C++】类作用域详解
- Go语言开发小技巧易错点100例(七)
- Xshell + lrzsz 实现Linux与Windos文件互传
- mpvue生成html,mpvue 打包成H5和微信小程序模板demo
- esper(复杂事件处理引擎)简介
- OpenDayLight+Mininet+Postman下发流表实验
- Ubuntu虚拟机不显示ip地址【已解决】
- 【WY】数据分析 — Pandas 阶段一 :基础语法 八 —— 函数汇总