当前位置: 首页 > news >正文

kafka学习总结

申明:

仅用于学习记录,参考资料在文末,若侵权,请联系我。

这篇文章将从以下几个方面了解kafka:
 

为什么使用消息队列?

消息队列的两种通信方式?

kafka?

基础架构及术语?

工作流分析?

背景

什么是消息队列?

kafka是一种消息中间件,在了解它之前,需要先了解一下什么是消息队列。

消息队列(Message Queue)[1]简写为MQ,可以简单将其理解成: 把要传输的数据放在队列中。

消息队列中间件主要解决应用解耦,异步消息,流量削锋, 消息通迅等问题, 从而实现高性能,高可用,可伸缩和最终一致性的架构。

生活中的场景: 快递员送快递到客户家,客户不在家或客户有事需要快递员等待,这样就降低了快递员工作的效率。所以现在小区或写字楼的楼下都建立了菜鸟驿站或蜂巢柜等,它们就相当于是消息队列。

消息队列的两种通信模式[2]

1、点对点

    点对点模式通常是基于拉取或者轮询的消息传送模型,这个模型的特点是发送到队列的消息被一个且只有一个消费者进行处理

生产者将消息放入消息队列后,由消费者主动地去拉取消息进行消费。

     优点:消费者的消费频率由消费者自己控制

     缺点:

     但是消息队列是否有消息需要消费,在消费者端无法感知,所以在消费者端需要额外的线程去监控。

 图片来自参考文章

2、发布订阅(类似于公众号,不用关注有没有消息,)

       生产者:将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者。

      消费者:被动接收推送。无法感知消息队列是否有待消费的消息。

      缺点:消息队列无法感知消费者消费速度

  图片来自参考文章

那么kafka是一种基于发布/订阅的消息系统。

kafka

kafka的基础架构

kafka的概念区分

概念一

 

生产者(producer):消息的发布者,创建消息

消费者(consumer):消息的订阅者,负责消费或读取消息

概念二:

主题(topic): 消息通过主题分类,每个主题对应一个消息队列,对应一类消息。对消息分类,主题就像数据库中的表。【消息的存放格式为队列,类似于用户排队,先进先出,在主题中先产生的消息就先被消费】


分区(partition):分区是对主题的水平扩展,那么对于分区里面的消息。主题被分为若干个分区。同一个主体中的分区可以不在一个机器上,有可能部署在多个机器上。

目的:实现kafka的伸缩性

总结:

一个topic中的消息被打散存储在多个分区(partition)中:

partition: topic的分区,每个topic可以有多个分区,同一个topic在不同的分区的数据是不重复的。topic数据中的整体是所有分区之和。

kafka中采用分区的目的是什么?分区的目的是做负载,提高kafka的吞吐量

概念三:

Broker:可以看作为一个服务器

集群(cluster):

一个分区可以被复制到多个broker上来实现

概念四:

消费者与消费组:

消息的读取是针对消费组的,消费组在逻辑上可以等价于一个应用

consumer Group:消费者组,每个消费者组都有一个唯一的组id

1、同一个分区中的数据只能被消费者组中的某一个消费者消费。【消费者与分区对应】那也就是说,从topic分区来说,topic分区与消费者是一对一关系;从消费者来说,一个消费者可以消费多个分区。如下图所示,当消费者组中消费者个数与topic分区少时,一个消费者可以消费多个分区数据;当消费者组中消费者的个数与topic分区个数一样多时,一对一关系;当消费者组中消费者的个数比分区topic的个数多时,从前往后依次排队,后面的消费者空闲

其他常用概念:

replication:副本。每个分区都有多个副本(Follower)。当主分区(Leader)故障时会选择一个Follower成为Leader。

要求:kafka中默认副本最大数量是10个,且副本的数量不能大于broker数据【可以将broker看做是服务器】

特点:Follower和leader绝对在不同的broker上,同一机器对同一个分区也只能存放一个副本(包括自己)

参考:

再过半小时,你就能明白kafka的工作原理了 - 知乎

消息队列(mq)是什么? - 知乎

学习 Kafka 入门知识看这一篇就够了!(万字长文) - 腾讯云开发者社区-腾讯云

相关文章:

  • 政策汇总 | 川渝发布若干政策支持双城经济圈健康发展、岷山行动计划第三批项目申报解答......近期16个政策汇总
  • Vue3.0中使用路由进行跳转和传参以及取值
  • 迷茫了3年:做完这个测试项目,我终于决定辞职
  • 时间相关模块
  • LINU下登录脚本的执行顺序
  • MySQL 文本函数和窗口函数
  • springboot+cloud实战派PDF让开发和微服务架构像喝水一样简单
  • QML自定义的日历控件
  • Hive的 mapreduce 计算例子
  • 代码演示傅里叶合成演示
  • 【实用工具】magic-api接口快速开发框架
  • 在线客服功能介绍-了解常见在线客服系统的功能点
  • 基于安卓/Android/微信小程序的学生作业管理系统
  • 数据库读写分离和分库分表
  • 长江中下游先民最早驯化野生稻 国稻种芯:全球35亿人口主食
  • JAVA SE 6 GC调优笔记
  • java取消线程实例
  • java正则表式的使用
  • Kibana配置logstash,报表一体化
  • maya建模与骨骼动画快速实现人工鱼
  • PHP面试之三:MySQL数据库
  • React16时代,该用什么姿势写 React ?
  • Spark RDD学习: aggregate函数
  • Vue2 SSR 的优化之旅
  • vue-cli在webpack的配置文件探究
  • 对JS继承的一点思考
  • 分享一份非常强势的Android面试题
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 双管齐下,VMware的容器新战略
  • 用mpvue开发微信小程序
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # 计算机视觉入门
  • #if #elif #endif
  • #图像处理
  • $.ajax中的eval及dataType
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计大学生兼职系统
  • (十五)使用Nexus创建Maven私服
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)ABI是什么
  • (转)可以带来幸福的一本书
  • (状压dp)uva 10817 Headmaster's Headache
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 反射的使用
  • .NET 设计模式初探
  • .net 无限分类
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET简谈设计模式之(单件模式)
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • @Bean, @Component, @Configuration简析