发布于订阅消息系统-Kafka

Kafka基本概念

一.消息

这里的消息可以看做数据库里的一个“数据行”或“一条记录”。消息由字节数组组成,对Kafka来说消息里的数据没有特别的格式或含义。消息可以有一个可选的元数据--键,键也是一个字节数组,当消息以可控方式写入不同分区时,会用到键。如为键生成一个一致性散列值,对分区数进行取模,从而为消息选择写入的分区。

二.主题(topic)与分区(partition)

Kafka的消息通过topic进行分类。topic可以被分为若干个partition,一个partition就是一个提交日志。消息以追加的方式写入partition,然后以先入先出的顺序读取消息。

1.一个topic包含多个partition,因此无法再整个topic范围内保证消息的顺序,但可以保证消息在单个partition内的顺序。如下图所示的topic共有4个partition,消息被追加写入每个partition的尾部。partition可以分布在不同的服务器上,使得topic可以横跨多个服务器,以此来提供比单个服务器更为强大的性能。

三.生产者和消费者

1.生产者

生产者(producer)创建消息。生产者在默认情况下把消息均衡地分分布到topic的所有partition上,而不关心特定消息会被写到哪个partition。特定情况下会把消息直接写到指定的分区。这通常是通过消息键和分区器来实现。

2.消费者

消费者(consumer)读取消息。消费者订阅一个或多个主题,按照消息生成的顺序读取它们。消费者通过检查消息的偏移量来区分已经读取过的消息。

2.1偏移量是另一种元数据,是一个不断递增的整数值,在创建消息时,生产者会把它添加到消息里。在给定的partition中,每个消息的偏移量都是唯一的。消费者将每个partition最后读取的消息的偏移量保存在Zookeeper或Kafka上,如果消费者关闭或者重启,它的读取状态不会丢失。

2.2 消费者群组。消费者是消费者群组的一部分,一个群组内的消费者会共同读取一个topic。但群组保证每个topic只能被一个消费者消费。如下图中

群组中共有三个消费者同时读取一个topic的消息,其中两个消费者各消费一个partition,另一个消费者消费其他两个partition。消费者与partition之间的映射关系被称为消费者对partition的所有权关系。

转载于:https://juejin.im/post/5c8e3107f265da681660d785

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值