小白这么看kafka

​​       今天在网上看了半天关于kafka的介绍,还去了官网,但是非常遗憾,作为小白,kafka到底怎么设计的还是没搞懂,而且感觉很多的博客都是大同小异的(怀疑是复制粘贴的),上来就介绍很多专业的名词和概念,但是解释的都不清楚(正经的书都不说人话)。但是看的多了还是“破解”一些门道,下面我不抄袭他们的写法,把卡不卡的原理基础用自己的理解写一下。有个中文教程这么写的:

(地址:https://www.orchome.com/kafka/index

       我觉的小白能看懂,但是消息中间件远不止这么简单(先搞懂简单的.......)。

       按照套路,该解释名词了,但我不想直接解释。先理解一下kafka是怎么存消息的,假如现在生产者有个消息要存储到kafka上,如果我是kafka,怎么办呢,我找了一个帮手,他叫zookeeper,他可以帮我找到一些人,提供一些地方,传说中的服务器就是他们,叫Broker,万事俱备,我开始存了,我非常聪明(假如),我先把消息分门别类,每个类都起个名字,这样就不会找错了,这个名字就叫主题吧,topic就是了,以后生产者找我存消息就告诉我存什么主题我就知道往哪存了,而不是乱放,后来消息越来越多,一个主题里的东西太多了,怎么办,我就想了个办法,把主题做成了很多分区,partition,比如topic1的消息存储在partition1和partition2两个分区上,每个分区里边的消息也是按顺序排好号码存放的,1号消息,2号消息。。。,这样,我通过找到topic在找到那个partition在找到哪个号码就非常准确的找到消息了,而且我还扩展了topic的容量,还保证了顺序,真好。

        这些消息都是存在broker上的,broker上有很多partition,partition1,partition2,partition3.。。。,突然有一天,broker放不下了,太多了,没办法,又拜托zookeeper找来了一个broker2,两个broker一起帮我存消息,这样就叫集群了(做集群还有其他的考虑,高可用,负载均衡什么的,但我认为,放不下可能是kafka做集群的最初动机),有了两个broker,以后存消息就不能乱放了,我先指定了一个分配策略,将这些partition均匀的分给两个broker,总不能一个累死一个闲死吧。这样,我就可以通过扩展broker来存更多的消息了。

        消息都是从哪来的?有一群叫producer的给我的,由于我存储的方法如上,我要求他们必须要告诉我主题topic是啥,我才能知道存到哪里,如果他们知道partition就可以指定存到哪个分区中了,但是很多时候他们不知道,所以我给了另一个方案,让他们提供一个key,我根据key做hash算法就能找到partion了,如果key一样,我就总能找到那个partition。

到这里,大部分名词就解释完毕了,producer(生产者),broker(服务器),topic(主题),partition(分区),就是这么简单,小白就是这么理解的。

       还要说一下我的顾客,就是消费者consumer,那我怎么把消息给消费者呢,我提供了两种方法,1:队列,2:发布订阅。其实我并没有设置一个开关什么的,是发布订阅还是队列,其实我只有一种方式,就是把消息发送给所有的consumer group。

但是我有个规定,就是规定一个消息只能在consumer组选一个出来消费。这就比如,我要发给一个组100块钱的奖励,只能由一个人来领,不能撕成好几张分给他们。但是我可以每个组都给100块钱。所以会有这样两种情况发生,1,只有一个组,我的消息会被这个组瓜分,但是每个消息只能由这个组里的一个人消费,这种情况就叫队列模式。2,这个组的人很聪明,他们知道我会给每个组钱,所以这个组的人每个人都假装是一个组,也就是每个consumer 都是不同的组,那我只能把消息发给他们每一个人,这就是发布订阅模式。

        呵呵我有那么好骗吗?当然不是,每个都假装一个组来要钱,我就把钱往桌上一摔,他们就抢啊,一下就乱套了。所以多个consumer并行消费无法保证消息的顺序消费。但是上面说到partition里是按照号码排好的有序消息,所以如果只有一个组来消费的话,消费单个partition就是有序的,也就是说一个分区只属于一个组里的一个consumer,但是一个topic有很多分区,那么一个consumer是可以消费多个分区的,那么多个consumer消费多个partition也是不冲突的。其实设置分区恰恰提高了消费效率,设置多个consumer来消费同一个toic,因为分区的存在,就可以同时(并行)消费这个主题的好几个消息了。这里很乱可以看网上的博文,有很多,小白就不参与理解了。

        还有很多的知识可以写,比如分区也可以自我复制,还有leader(领导)和follower(随从),他们组成了一个ISR,follower不听话还会被踢出ISR。还有offset(也就是消息的号码)是怎样维护的,据说存在了一个名为 __consumer_offsets 的Topic中。好了,到这里kafka的消息发布存储消费的基本原理就解释完了,这是很粗俗简单的(不保证严谨),但是有助于理解,还在学习中。。。打字打得手疼,不写了(*^▽^*)。​​​​

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值