首页 > 其他分享 >Kafka是什么-第一篇

Kafka是什么-第一篇

时间:2022-11-25 12:04:49浏览次数:32  
标签:第一篇 什么 partition Broker Kafka Topic 吞吐量 消息


前言

如果有幸目睹过系统从零到一的演变过程,大家估计都会有一种感叹,就是随着业务复杂度和流量的不断上升,系统变得越来越难以维护,面对高额的维护成本,攻城师们不得不对现有架构进行改造升级,以便使得系统更适合当下业务的发展。

说到架构改造升级,那到底该怎么改造呢?从哪里入手比较合适呢?这是一个比较大的话题,一两句话没办法讲述清楚,但是有一个出发点肯定是没有错的,就是为了更好的适应业务的发展需要进行必要的改造。

假设几个场景,场景一:用户 A 刷了微博,可能对某类博主比较感兴趣,为了让用户 A 看到更多可能感兴趣的人,该怎么做呢?场景二:用户 A 修改了年龄,搜索部门为了给其推荐可能感兴趣的商品,需要实时知道用户修改年龄的动作,采用何种方式来降低用户部门和搜索部门的耦合程度呢?场景三:京东 618 当天,大佬们想要看到实时成交总额,但又不能影响业务正常运行,又该怎么做呢?从以上几个例子可以看出,为了使得消息传递实时(说一下作者对实时的理解:在用户能接受的时间范围内得到想要的结果就是实时),降低业务部门的耦合度,需要有一个“中介”从中传递从而达到目的。

各消息队列对比

主流消息队列特性对比如下

特性

Kafka

RocketMQ

ActiveMQ

RabbitMQ

吞吐量

高吞吐量,可达 10w 级别

高吞吐量,可达 10w 级别

1w 级别,吞吐量相交比较低

1w 级别,吞吐量相交比较低

时效性

延迟在 ms 级

延迟在 ms 级

延迟在 ms 级

延迟在微妙级,延迟最低

可用性

天然的分布式系统,数据有副本机制,可用性非常高

分布式架构,可用性非常高

主从架构,可用性较高

同 ActiveMQ

维护性

基于 Java 和 Scala 语言 实现,社区活跃度高,维护成本较低

基于 Java 语言实现,社区活跃度高,维护成本较低

基于 Java 语言实现,消息队列场景功能很完备,但社区活跃度较低,维护成本较高

基于 erlang 语言开发,社区活跃度一般,小团队维护成本较高

Kafka 是什么?

Kafka 是一个分布式的、高吞吐量的、可持久性的、自动负载均衡的消息队列,同时 Kafka 从一定意义上来说具有横向易扩展性,通过 Kafka 也可以降低系统间的耦合度。

Kafka 消息队列中的消息生产消费模型是什么样的,即消息从何处来,又被送往何处去

Kafka是什么-第一篇_消息队列

从上图可以看出,消息的产生可以是 APP 应用、DB 等等渠道,从各渠道产生的消息交给 Kafka Cluster,然后在通过计算将结果送到 DB、APP 等应用中。其实说白了就是一个典型的生产者消费者模型的具体应用。

Kafka 整体架构图

Kafka是什么-第一篇_kafka_02

整体架构图

相关组件介绍

  • ​Producer​

消息发布者;即主要作用是生产数据,并将产生的数据推送给 Kafka 集群。

  • ​Consumer​

消息消费者;即主要作用是 kafka 集群中的消息,并将处理结果推送到下游或者是写入 DB 资源等。

  • ​Zookeeper Cluster​

存储 Kafka 集群的元数据信息,比如记录注册的 Broker 列表,topic 元数据信息,partition 元数据信息等等。

  • ​Broker​

Kafka 集群由多台服务器构成,每台服务器称之为一个 Broker 节点。

  • ​Topic​

主题,表示一类消息,consumer 通过订阅 Topic 来消费消息,一个 Broker 节点可以有多个 Topic,每个 Topic 又包含 N 个 partition(分区或者分片)。

  • ​Partition​

partition 是一个有序且不可变的消息序列,它是以 append log 文件形式存储的,partition 用于存放 Producer 生产的消息,然后 Consumer 消费 partition 上的消息,每个 partition 只能被一个 Consumer 消费。partition 还有副本的概念,后面文章来详细介绍。

标签:第一篇,什么,partition,Broker,Kafka,Topic,吞吐量,消息
From: https://blog.51cto.com/u_13940603/5886208

相关文章

  • copy构造函数为什么一定要传引用?
    原因:如果拷贝构造函数中的参数不是一个引用,即形如CClass(constCClassc_class),那么就相当于采用了传值的方式(pass-by-value),而传值的方式会调用该类的拷贝构造函......
  • C#中String和string有什么区别?
    问题这两者有什么区别,我应该使用哪一个?strings="Helloworld!";Strings="Helloworld!";解答string是C#中System.String.所以从技术上讲,没有区别。就好像in......
  • C# 中的 const 和 readonly 有什么区别?
    问题constC#和C#之间有什么区别readonly?你什么时候会用一个而不是另一个?除了明显的区别必须在定义constVSreadonly值时声明值可以动态计算,但需要在构造函数退出之前分......
  • Microsoft.NET.Sdk 和 Microsoft.NET.Sdk.Web 有什么区别
    “核心”SDK和WebSDK之间有什么区别,这些对通用主机应用程序有何影响?最重要的区别是:默认项目WebSDK具有不同的定义和globbing模式,用于将哪些文件包含在已发布......
  • HTTP返回的状态码都表示什么含义
    HTTP返回的状态码都表示什么含义201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问。200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网......
  • wifidbm是什么意思?wifi信号强度dbm多少正常?
    dbm是无线信号的强度单位,通常用来表示无线信号强度的大小。dbm是一个表示功率绝对值的值,是以1mw为0dbm,公式dbm=10×lg(毫瓦数/1),所以为负值,同时这个值越大,表示信号越好。无线......
  • 从 Uber 数据泄露事件我们可以学到什么?
    Uber数据泄露始于一名黑客从暗网市场购买属于一名Uber员工的被盗凭证。最初尝试使用这些凭据连接到Uber的网络失败,因为该帐户受MFA保护。为了克服这一安全障碍,黑客......
  • 好好的系统,为什么要分库分表?
    大家好,我是小富~说在前边今天是《分库分表ShardingSphere原理与实战》系列的开篇文章,之前写过几篇关于分库分表的文章反响都还不错,到现在公众号:程序员小富后台不断的有......
  • 深度拆解:体验好、满意度高,客户为什么不复购的内在逻辑
     (全文超过1万字,建议先收藏,再阅读~) 目录1、关于客户复购的认知悖论2、客户能感知到的才是体验!3、客户怎样才算满意?4、客户满意就一定会复购?5、要怎么才能增强客户粘性?6、......
  • 引流是什么? 怎样学习引流?
    引流是指吸引用户,通过某种方法,某种手段能让更多的人可以看到你,关注到你。引流3种常见思维获取流量,永远是商业市场永恒不变的共同需求。是指单位时间内流经封闭管道或明......