前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >消息中间件--01. Kafka的几个疑问

消息中间件--01. Kafka的几个疑问

作者头像
付威
发布于 2020-02-19 07:40:33
发布于 2020-02-19 07:40:33
1.8K0
举报

Kafka是基于partition的模型,在消费的时候,消费者会和kafka建立一个绑定的关系。假设有一个topic有3个partition:P1,P2,P3,同时有一个消费group对应有3个消费者:C1,C2,C3,则消费会建立一个P1-C1,P2-C2,P3-C3的关系。

如果消费者数量多于partirion的话,就会有消费者空闲。

而如果partition个数比consumer个数多,则有可能导致有的消费者存在比其他消费者多的情况:

所以,kafka的最合理的分配机制是partition与consumer的成倍数关系,而且一个partition只能被一个消费者消费。

交代了Kafka的基本模型,下面再说几个疑问:

  1. 一个Consumer是什么意思,一个线程还是进程?
  2. 消费组是什么含义?
  3. 为什么一个partition不能被多个Consumer消费?

上面几个问题,有的却是很低级,但是却是不弄清楚就是层窗户纸。

: —————————–

  1. 一个Consumer是一个消费者实例,可以是一个线程,也可以是一个进程,可以理解成一个客户端。一个客户端可以是一个单独的进程,也可以个开多个线程调用的一个客户端实例。
  2. 个人觉得消费组的引入是能让消息更通用化的消费,通俗的来说,一个消息的Topic中一个partition每次被消费的时候,会记录一个消费的进度,用术语来说是offset(位移)。 假设一个Topic中有10条消息,被消费者A消费了2条,则消费者A对应的offset的为2。如果这个时候有一个消费者B想从头消费,又不影响消费者A的消费offset,这个时候就需要引入一个消费组的概念。
  3. 对于问题3,也想了很久,如果在不考虑顺序的话,kafka完全可以多个消费者消费一个partition,而且与现在的kafka的机制并不违背。

对于为什么一个partition只能被一个消费组里的一个消费者消费,可能就是为了保证有序性,网上也查了点资料:

相比传统的消息系统,Kafka可以很好的保证有序性。 传统的队列在服务器上保存有序的消息,如果多个consumers同时从这个服务器消费消息,服务器就会以消息存储的顺序向consumer分发消息。虽然服务器按顺序发布消息,但是消息是被异步的分发到各consumer上,所以当消息到达时可能已经失去了原来的顺序,这意味着并发消费将导致顺序错乱。为了避免故障,这样的消息系统通常使用“专用consumer”的概念,其实就是只允许一个消费者消费消息,当然这就意味着失去了并发性。

在这方面Kafka做的更好,通过分区的概念,Kafka可以在多个consumer组并发的情况下提供较好的有序性和负载均衡。将每个分区分只分发给一个consumer组,这样一个分区就只被这个组的一个consumer消费,就可以顺序的消费这个分区的消息。因为有多个分区,依然可以在多个consumer组之间进行负载均衡。注意consumer组的数量不能多于分区的数量,也就是有多少分区就允许多少并发消费。

Kafka只能保证一个分区之内消息的有序性,在不同的分区之间是不可以的,这已经可以满足大部分应用的需求。如果需要topic中所有消息的有序性,那就只能让这个topic只有一个分区,当然也就只有一个consumer组消费它

(本文完)

作者:付威 博客地址:http://blog.laofu.online 如果觉得对您有帮助,可以下方的RSS订阅,谢谢合作 如有任何知识产权、版权问题或理论错误,还请指正。 本文是付威的网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证 交流请加群113249828: 点击加群   或发我邮件 laofu_online@163.com

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
消息中间件--01. Kafka的几个疑问
Kafka是基于partition的模型,在消费的时候,消费者会和kafka建立一个绑定的关系。假设有一个topic有3个partition:P1,P2,P3,同时有一个消费group对应有3个消费者:C1,C2,C3,则消费会建立一个P1-C1,P2-C2,P3-C3的关系。
付威
2020/02/18
3060
消息中间件--02. Kafka架构
partition:一个队列中的消息可以存储到多台broker上面,一个broker中的分区,称为partition
付威
2020/02/19
5530
消息中间件--02. Kafka架构
消息中间件--04. Kafka常用的命令
现在我们来创建一个名字为testTopic和testTopic1 的Topic,这个topic有两个partition,并且备份因子也设置为2:
付威
2020/02/20
3360
消息中间件之Kafka史上最强原理总结
最近项目使用到中间件,自己以前也对kafka原理应用垂涎已久了,故这个周末抽空总结一波。
后台技术汇
2022/05/28
7460
消息中间件之Kafka史上最强原理总结
进击消息中间件系列(一):Kafka 入门(基本概念与架构)
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
民工哥
2023/08/22
2.3K0
进击消息中间件系列(一):Kafka 入门(基本概念与架构)
消息中间件 Kafka
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。适用于需要可靠的数据传送的分布式环境。
京剧猫
2023/03/04
9120
消息中间件 Kafka
Kafka作为消息系统的系统补充
Apache Kafka由Scala和Java编写,基于生产者和消费者模型作为开源的分布式发布订阅消息系统。它提供了类似于JMS的特性,但设计上又有很大区别,它不是JMS规范的实现,如Kafka允许多个消费者主动拉取数据,而在JMS中只有点对点模式消费者才会主动拉取数据。
大数据学习与分享
2020/08/10
5540
Kafka作为消息系统的系统补充
Kafka简介及安装配置
Kafka简介及安装配置 一、简介     Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,使用Scala语言编写,之后成为Apache项目的一部分,目前是Apache的一个顶级项目。     Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。     它提供了类似于JMS(Java消息队列规范)的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。     kafka对消息保存时根据Topic进行归类,发送消息者称为P
云飞扬
2018/05/11
1.5K0
消息队列之Kafka
kafka是⼀个分布式、⽀持分区的(partition)、多副本的(replica),基于zookeeper协调 的分布式消息系统,最⼤的特性就是可以实时的处理⼤量数据以满⾜各种需求场景。 它有以下特性:
羽毛球初学者
2024/10/14
1720
Kafka原理解析
Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它以可水平扩展和高吞吐率而被广泛使用。
我有一只萌妹子
2022/06/23
3120
Kafka原理解析
Kafka概念入门(一)
  比如,有100条有序数据,生产者发送到kafka集群,kafka的分片有4个,可能的情况就是一个分片保存0-25,一个保存25-50......这样消息在kafka中存储是局部有序了。严格说,kafka是无法保证全局消息有序的,没有这个机制,只能局部有序。
intsmaze-刘洋
2018/08/29
7710
kafka原理解析
 broker:中间的kafka cluster,存储消息,是由多个server组成的集群。  topic:kafka给消息提供的分类方式。broker用来存储不同topic的消息数据。  producer:往broker中某个topic里面生产数据。  consumer:从broker中某个topic获取数据。
爱撸猫的杰
2020/03/19
4700
消息队列与kafka
在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。
超蛋lhy
2019/05/05
1.6K0
流平台 Kafka
Kafka 作为一个分布式的流平台,正在大数据相关领域得到越来越广泛的应用,本文将会介绍 kafka 的相关内容。
凌虚
2020/07/20
7410
流平台 Kafka
什么是Kafka?它有四个关键概念值得我们去学习
Apache kafka is a distributed streaming platform,官方定义 kafka 是一个分布式流式计算平台 。而在大部分企业开发人员中,都是把 kafka 当成消息系统使用,它是一个分布式消息队列,但是很少会使用 kafka 的流式计算。它有四个关键概念:
IT大咖说
2019/12/17
7770
什么是Kafka?它有四个关键概念值得我们去学习
分布式基础概念-消息中间件[Kafka]
Consumer Group:消费者组,消费者组内每个消费者负责消费不同分区的数据,提高消费能力。逻辑上的一个订阅者。
@派大星
2023/12/13
2900
分布式基础概念-消息中间件[Kafka]
开源消息中间件Kafka在华泰证券的探索与实践
本文选自《交易技术前沿》第二十九期 (2017年12月) 樊建谷正亮陆俊 华泰证券股份有限公司信息技术部 邮箱:fanjian@htsc.com 摘要:Kafka 作为开源消息中间件的重要分支,在券商领域会有怎样的应用场景?本文从华泰证券的应用现状出发,介绍了 Kafka 在华泰证券的大规模实践经验。 点击阅读原文,即可查看原文链接。 1. 引言 Apache Kafka 发源于 LinkedIn,于 2011 年成为 Apache 的孵化项目,随后于 2012 年成为 Apache 的顶级
Spark学习技巧
2018/06/22
1.7K0
Kafka——分布式的消息队列
Producers – 生产者 生产者将数据发布到他们选择的主题。生产者负责选择要分配给主题中哪个分区的消息 可以以循环方式完成此操作,仅是为了平衡负载,也可以根据某些语义分区功能(例如基于消息中的某些键)进行此操作。
时间静止不是简史
2020/07/24
1.4K0
Apache Kafka核心概念入门
Apache Kafka是一款基于日志的消息系统,后来Kafka发展成为了一个“distributed streaming platform”,包含了消息系统,存储系统和流处理系统三个功能。
哒呵呵
2018/09/18
4640
从面试角度一文学完 Kafka
Kafka 是一个优秀的分布式消息中间件,许多系统中都会使用到 Kafka 来做消息通信。对分布式消息系统的了解和使用几乎成为一个后台开发人员必备的技能。
Bug开发工程师
2020/10/26
1.3K0
从面试角度一文学完 Kafka
相关推荐
消息中间件--01. Kafka的几个疑问
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档