kafka原理

注:kafka从个人经验来说一定要弄清楚生产者以及消费者如何去对接其它组件的,有了这个为基础再弄清楚如何在二者中指定对应的主题以及分区,并且掌握消费者组的概念以及offset和HW的概念就可以做基本的使用了;但是如果需要达到开发级别的话还是需要将kafka原理及相应API阐释清楚。
本篇仅概述kafka原理以及两者API的书写,希望对初学者有所帮助,并且也希望高手多多指教。
本篇将分为:

  • kafka的架构
  • kafka的topic与partition
  • kafka的消息流处理
  • kafka在zookepeer的路径
    kafka原理图上图是基于个人理解所画的图,如果有什么不妥之处还请斧正。一般刚看这个图会有些萌萌哒,那么接下来我将通过对kafka的原理概述之后再回过头来看应该会有所帮助。

kafka的介绍
Kafka 是分布式发布-订阅消息系统,即,kafka是一种分布式的消息队列工具。
kafka特点
a.高吞吐量
kafka每秒可以生产约25万消息(50MB),每秒可以处理55万消息(110MB)
b.持久化数据存储
可进行持久化操作。将消息持久化到磁盘,按顺序读写。据测试按顺序磁盘读写比随机内存写还要快。
c.分布式系统易于扩展
所有的producer、broker和consumer都会有多个,均为分布式。无需停机就可以添加机器。
d.客户端状态维护
消息被处理的状态是在consumer端维护,而不是由server端维护。减轻服务器端的压力,为客户端会话管理提供了更好的灵活性。

描述架构之前我还想再铺垫一下使用的步骤。
消息写入到kafka是需要通过生产者端的,生产者端可以是flume可以是Nginx也可以是我们自己调用kafkaAPI手写生产者,消费者也是如此。
但是无论是什么生产者来源,都需要在kafka中创建对应的topic(主题)指定patition(分区:分区的存在是为了提高并发能力,分区数的多少由消费者多少来定义,最好结合sparkRDD数或者,如果需求是将同一个客户端的数据存入一个文件,就可以将分区与文件一一对应,存入HDFS或被Spark消费或闯入其他机器。曾经面试被问过)
如果有不理解的自己可以尝试画图并动手操作一下。

有了以上介绍以后就直接进入kafka架构:
看架构图还是需要明白一个概念就是kafka中的leader与follower;
在kafka集群中每个分区有若干副本,这些副本分布式的存放在不停服务器上,其中有一个称为leader,leader负责读写操作,其他的副本就只是同步,选举leader跟zookepeer不一样,有一个ISR区域,可以想象成为奴隶场(毕竟干活的都是他),只要ISR区域中有机器活着,leader就会从中产生,另外kafka 0.8.*使用的是选择第一个活过来的replica,虽然可能会丢失数据。
在这里插入图片描述1.producer:
消息生产者,发布消息到 kafka 集群的终端或服务。
2.broker:
kafka 集群中包含的服务器。broker (经纪人,消费转发服务)
3.topic:
每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。
4.partition:
partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。
5.consumer:
从 kafka 集群中消费消息的终端或服务。
6.Consumer group:
high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。
即组间数据是共享的,组内数据是竞争的。
7.replica:
partition 的副本,保障 partition 的高可用。
8.leader:
replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
9.follower:
replica 中的一个角色,从 leader 中复制数据。
10.controller:
kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。
11.zookeeper:
kafka 通过 zookeeper 来存储集群的 meta 信息。

有了架构图之后我还想再上Producer 写入消息序列图
在这里插入图片描述流程说明:

  1. producer 先从 zookeeper 的 “/brokers/…/state” 节点找到该 partition 的 leader
  2. producer 将消息发送给该 leader
  3. leader 将消息写入本地 log
  4. followers 从 leader pull 消息,写入本地 log 后 leader 发送 ACK
  5. leader 收到所有 ISR 中的 replica 的 ACK 后,增加 HW(high watermark,最后 commit 的 offset) 并向 producer 发送 ACK。
    ISR指的是:比如有三个副本 ,编号是① ② ③ ,其中② 是Leader ① ③是Follower。假设在数据同步过程中,①跟上Leader,但是③出现故障或没有及时同步,则① ②是一个ISR,而③不是ISR成员。后期在Leader选举时,会用到ISR机制。会优先从ISR中选择Leader

kafka在zookepeer的路径
在这里插入图片描述
至于关系还是请看第一张图。

讲述到这里再补充一下offset和HW的概念,不然无法理解流程图。这个就涉及到kafka的可靠性保证了
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值