文章目录

  • 前言
  • 一、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 + OSR

  • QPS: 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介绍,应用场景及注意事项】相关推荐

  1. JSON的使用场景及注意事项介绍

    上篇我们讲解了JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Douglas Crockford) 和 奇普·莫宁斯达(Chip Mornings ...

  2. [转]kafka介绍

    转自 https://www.cnblogs.com/hei12138/p/7805475.html kafka介绍 1.1. 主要功能 根据官网的介绍,ApacheKafka®是一个分布式流媒体平台 ...

  3. 微服务 ZooKeeper ,Dubbo ,Kafka 介绍应用

    目录 微服务 微服务的优缺点 微服务技术栈 ​编辑 常见的微服务框架 ZooKeeper 工作原理 ZooKeeper 集中存放管理 ZooKeeper 功能  动物园管理员 ZooKeeper 服务 ...

  4. 消息队列Kafka介绍

    Kafka用来构建实时数据管道和数据流应用.它是水平可扩展的,具有容错性的,极其快速的,并且已应用于上千家公司的产品环境中. 介绍 Apache Kafka是一个分布式流平台[distributed ...

  5. 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen

    算法:详解布隆过滤器的原理.使用场景和注意事项@知乎.Young Chen 什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data struc ...

  6. 批量提交 kafka_Kafka精华问答|kafka的使用场景是什么?

    戳蓝字"CSDN云计算"关注我们哦! Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.作为一种高吞吐量的分布式发布订阅消息系统,有着诸多特 ...

  7. Kafka精华问答 | kafka的使用场景是什么?

    戳蓝字"CSDN云计算"关注我们哦! Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.作为一种高吞吐量的分布式发布订阅消息系统,有着诸多特 ...

  8. kafka使用_Kafka精华问答 | kafka的使用场景是什么?

    戳蓝字"CSDN云计算"关注我们哦! Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.作为一种高吞吐量的分布式发布订阅消息系统,有着诸多特 ...

  9. 2017-3-11 Kafka的应用场景

    标签: 有道云笔记 Kafka的应用场景: 1 消息队列 比起大多数的消息系统来说,Kafka有更好的吞吐量,内置的分区,冗余及容错性,这让Kafka成为了一个很好的大规模消息处理应用的解决方案.消息 ...

  10. RabbitMq与Kafka的使用场景和区别

    这是陈东景于2021年8月29日下午16点原创作品,转载请标明出处!!!! 在进行软件设计的过程中,如果软件设计业务上存在需要短时间内处理大批量的信息,又需要能保证软件能正常运行(保证软件的高可靠和高 ...

最新文章

  1. java 文件md5校验_Java 获取 文件md5校验码
  2. 手机经常提示找不到服务器,经常出现找不到服务器是什么原因?什么网也打 – 手机爱问...
  3. BV-Person: A Large-scale Dataset for Bird-view Person Re-identification
  4. FusionCharts參数中文说明
  5. [Swift]LeetCode944. 删除列以使之有序 | Delete Columns to Make Sorted
  6. 畅享音视频技术饕餮盛宴,就在LiveVideoStackCon 上海站
  7. JS 判断滚动底部并加载更多效果。。。。。。。。。
  8. Python3 基础学习笔记 C03【操作列表】
  9. 华为mate10pro测试软件,华为Mate10和华为Mate10Pro的区别在哪里?华为Mate10和华为Mate10Pro对比测评告诉你(附全文)...
  10. module.exports与exports,export与export defa
  11. GBase学习-安装GBase 8a MPP Cluster V95
  12. ADB命令和Monkey命令
  13. 无人驾驶网约车营销分析
  14. 旋转矩阵(维基百科)
  15. DAO是什么?为什么我们需要DAO?
  16. 人人影视携2000万用户进军区块链,区块链会流行起来吗?
  17. 数学建模快速入门(6)二维图和三维图
  18. 029:vue+openlayers:使用MVT格式读取瓦片数据(示例代码)
  19. 如何把证件照底色变白?怎样更换电子版证件照底色?
  20. 用pandas批量分组处理excel数据

热门文章

  1. 【Spring框架】Spring中的DI介绍
  2. java字符串长度_Java中String字符串的最大长度?
  3. 【C++】类作用域详解
  4. Go语言开发小技巧易错点100例(七)
  5. Xshell + lrzsz 实现Linux与Windos文件互传
  6. mpvue生成html,mpvue 打包成H5和微信小程序模板demo
  7. esper(复杂事件处理引擎)简介
  8. OpenDayLight+Mininet+Postman下发流表实验
  9. Ubuntu虚拟机不显示ip地址【已解决】
  10. 【WY】数据分析 — Pandas 阶段一 :基础语法 八 —— 函数汇总