Kafka基础概念

Kafka有什么用途?

举例有如下场景:

  1. 当前有一个接口提供创建用户一个草稿评论
  2. 检查草稿后,若合法则将其推到线上,发现违禁字则删除。
  3. 若删除则记录用户不合法次数+1
  4. 推到线上后将文章评论数+1,并通知文章作者收获了一条评论
  5. 。。。。

上述操作的后续操作可以无限拓展下去,如果放在一个“创建评论”中写完未免过于冗长。站在事件驱动的角度来看,好像一滴水滴入湖中,引发起不断的波澜。那么有没有一种方式能使操作专注于本身的修改,后续的操作由它们自己发现并开始呢?答案是使用消息队列
Kafka就是这样一种消息队列。使用Kafka我们可以将上述场景改为:

  1. 创建草稿评论后,发送一条comment_create的消息
  2. 发现一条comment_create消息,消费者检查评论是否合法,并选择删除或通过评论。若通过发送一条comment_created,不通过发送一条comment_illegal
  3. 发现一条comment_created消息,消费者向文章作者发推送,将文章评论数+1
  4. 发现一条comment_illegal消息,消费者将用户置为不合法

可以看到上述操作像是一道水波,从1开始扩展到2,再扩展到3或4,并且其中每一步都是异步的。

什么是生产者与消费者

Producer生产者生产消息,被指定的Consumer消费者消费掉。

什么是Topic

Kafka每个消息都需要指定一个Topic,每个Producer发送消息都需要指定一个Topic作为目标。而Consumer也是从对应的Topic中拉取消息(实际不止是这样)。

什么是分组(Group)

每个Consumer属于一个consumer Group,每个Group可以有多个Consumer。每个Group可以订阅一个Topic,发送到Topic的消息,会发送给每一个了此Topic的Group。
而Group每次收到消息会随机选定自己的一个Consumer来消费。示意图如下:

这里写图片描述

什么是Partition(分区)

到这里开始就涉及一些各深层的概念了:每个Topic将被分成多个Partition(区),一个消息到来时会根据Producer指定的算法存储在某个Partition中,就是说把数据分开存储,避免单台Kafka实例存储的数据量过大。此外越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力(具体原理参见下文)

任何发布到某个Partition的消息都会被直接追加到它的log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型整数,用于唯一标记一条消息。

什么是Replica(备份)

Kafka可以指定每个Partition的备份数,这样即使一台机器崩了,备份数据的机器可以立即生效。
如果每个Partition都有多个备份,那么选择哪一台来读写呢?这就涉及到Leader的概念,在Kafka里会选定Partition的一台实例作为Leader,其它所有的作为Follower。
Leader负责所有的读写,如果它失效了,那么将会有其他Follower来接管为新Leader。而在正常情况下,所有的Follower只是单调的向Leader请求最新数据(同步数据)。

由此可见作为Leader的服务器承载了全部的请求压力,因此从集群的整体考虑,有越多个Partitions就意味着有越多个"Leader",也就更能确保整体的稳定性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值