Kafka初识

简介

Kafka 是由 linkedin 领英在 2010 年开发的消息系统。后来给 apache 开源了,由 scala 和 java 编写,该项目的目标是为处理实时数据提供一个统一的,高吞吐的,低延迟的平台

kafka 持久化的本质是一个按照分布式事务日志架构的大规模发布/订阅消息队列,这使得它很利于做企业的基础设置来处理流式数据

kafka 是一个消息中间件,可以作为消息队列

名词术语

  • Topic:主题,用来对消息进行分类,每个进入 kafka 的消息都会被归类到一个 topic 下
  • Partition:分区,每个 topic 主题会有若干个分区,用来提高消息的处理效率
  • Broker:代理,用来实现数据存储的主机服务器
  • Producer:生产者,消息的生产者
  • Consumer:消费者,消息的消费者
  • Consumer Group:消费者组,消息的消费者组成的组

一些解释

可以先了解下发布订阅者模型,然后再来看 kafka

topic 下多 partition

每个 topic 中可以划分多个分区,同一 topic 下不同分区消息不同,kafka 可以保证同一分区内的消息是有序的,但是无法保证不同分区的消息是有序的

每条消息发送到 broker 代理机上,会根据 partition 规则来选择存储到哪个 partition 上,如果 partition 设置合理的话,所有的消息会均匀的分布在不同的 partition 上

img

打个比方,比如创建了一个 topic 叫 test,其有 3 个 partition,在 kafka 的数据目录中我们能看到/tmp/kafka-log中会有 3 个目录,分别是test-0test-1test-2

kafka 中的消息

消息是 kafka 中基本数据单元,kafka 中一条消息由 kv 构成。当我们发送一条消息时候我们指定 key,kafka 根据 key 和 partition 机制判定当前这条消息应该发送并存储到哪个 partition 中

详细讲解

kafka 模型:生产者向 kafka 发送消息,消费者监听 kafka 来接收消息

img

当然一个服务也可以同时成为生产者和消费者

img

topic A 是生产者发送消息的目标地址,同时也是消费者监听的目标

img

一个 topic 是由多个 partition 分区构成的,这样是方便 topic 扩展功能,就像下图中两个管道一样。生产者发送消息给 topic,topic 的某个分区回去接收这个消息(由 topic 决定哪个分区接收消息,默认采用轮询策略)。但是消费监听的是 topic A 的所有分区

img

由 topic 决定消息进入哪个管道(partition 分区),默认采用轮询策略,同分区内消息是有序,不同分区消息的顺序无法判定,有时候可以配置 topic 让同类型消息走一个 partition,这样就能识别识别先后

img

我们看到上面这些逻辑结构,但是实际的物理存储又是怎样的呢?假如我们有如下两个 topic,每个 topic 有两个分区

img

实际物理上的存储是如下的,topic A 会把 #1 分区拷贝多份放在不同 node 物理机上,目的是增强其可靠性,万一一台 node 挂了其他的还能用,这些 #1 中 ZooKeeper 会指定一个 leader 主分区,其他都为辅的 #1 分区,leader 主要做消息收发,以及同步其他辅助分区的作用,这样 topic A 中 #1 就都含有了消息数据

img

然后 kafka 中存在多个 topic,在物理机中的存储是怎样的呢?可以看到下图,包含了 topic A(含有两个分区),topic B(含有两个分区),可以发现 topic A 的两个分区在物理机上并不是说分区 1 和分区 2 都必须要在同一个 node 上,对于 topic A 来讲只要能保证至少有一个 #1 在某个 node 上,#2 也在某个 node 上,其他的分区只不过是 follower,topic B 也是类似。不过注意最好不要让 topic A 的 #1 的 leader 和 #2 的 leader 出现在同一 node 上,否则一个 node 挂掉就比较麻烦了,leader 尽量分 node 存放

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值