| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Kafka入门 -> 正文阅读 |
|
[大数据]Kafka入门 |
前言: 不同业务场景下该如何选型消息队列? 在实际场景中,性能强大的 Kafka 支持排序保证,非常适合提取消息;而RocketMQ、RabbitMQ 拥有完善的队列特性,可以弥补 Kafka 的不足。 很多公司经常会在 Kafka 和 RabbitMQ 或 RocketMQ 之间做选择,这是因为在实时流式架构中,消息用例可被分为两类:队列和流。两者都不能舍弃,系统复杂度自然大大提高。除了老牌消息系统,新一代云原生消息系统 Apache Pulsar 支持流处理,同时它的共享订阅模式能将 topic 用作队列,向同一 topic 内的 consumer 提供多个虚拟队列并支持延迟发送消息。冉冉升起的新星 Pulsar 支持三种订阅类型,很大程度上解决了现有开源消息系统的核心痛点: 排他性。只能有一个 Consumer,接收一个 Topic 所有的消息 扯远了。。。。。。圆规正转 Kafk 在具体了解Kafka的细节前,我们先来看一下它的一些基本概念:
从上面几点我们大致可以推测Kafka是一个分布式的消息存储系统,那么它就仅仅这么点功能吗,我们继续看下面。 Kafka为了拥有更强大的功能,提供了四大核心接口:
它们与Kafka集群的关系可以用下图表示: 在了解了Kafka的一些基本概念后,我们具体来看看它的一些组成部分。 顾名思义Topics是一些主题的集合,更通俗的说Topic就像一个消息队列,生产者可以向其写入消息,消费者可以从中读取消息,一个Topic支持多个生产者或消费者同时订阅它,所以其扩展性很好。Topic又可以由一个或多个partition(分区)组成,比如下图:其中每个partition中的消息是有序的,但相互之间的顺序就不能保证了,若Topic有多个partition,生产者的消息可以指定或者由系统根据算法分配到指定分区,若你需要所有消息都是有序的,那么你最好只用一个分区。另外partition支持消息位移读取,消息位移有消费者自身管理,比如下图:由上图可以看出,不同消费者对同一分区的消息读取互不干扰,消费者可以通过设置消息位移(offset)来控制自己想要获取的数据,比如可以从头读取,最新数据读取,重读读取等功能。offset 消息在日志中的位置,可以理解是消息在 partition 上的偏移量,也是代表该消息的唯一序号。 上文说到过,Kafka是一个分布式的消息系统,所以当我们配置了多个Kafka Server节点后,它就拥有分布式的能力,比如容错等,partition会被分布在各个Server节点上,同时它们中间又有一个leader,它会处理所有的读写请求,其他followers会复制leader上的数据信息,一旦当leader因为某些故障而无法提供服务后,就会有一个follower被推举出来成为新的leader来处理这些请求。 异地备份是作为主流分布式系统的基础功能,用于集群中数据的备份和恢复,Kafka利用MirrorMaker来实现这个功能,用户只需简单的进行相应配置即可。 Producers作为消息的生产者,可以自己指定将消息发布到订阅Topic中的指定分区,策略可以自己指定,比如语义或者结构类似的消息发布在同一分区,当然也可以由系统循环发布在每一个分区上。 Consumers是一群消费者的集合,可以称之为消费者组,是一种更高层次的的抽象,向Topic订阅消费消息的单位是Consumers,当然它其中也可以只有一个消费者(consumer)。下面是关于consumer的两条原则:
下面是一个简单的例子,帮助大家理解: consumer-groups上图中有两个Server节点,有一个Topic被分为四个分区(P0-P4)分别被分配在两个节点上,另外还有两个消费者组(GA,GB),其中GA有两个消费者实例,GB有四个消费者实例。 从图中我们可以看出,首先订阅Topic的单位是消费者组,另外我们发现Topic中的消息根据一定规则将消息推送给具体消费者,主要原则如下:
总的来说,Kafka会根据消费者组的情况均衡分配消息,比如有消息着实例宕机,亦或者有新的消费者加入等情况。 kafka作为一个高水准的系统,提供了以下的保证:
Zookeeper 管理 kafka 集群,负责存储了集群 broker、topic、partition 等 meta 数据存储,同时也负责 broker 故障发现,partition leader 选举,负载均衡等功能。服务治理 既然 Kafka 是分布式的发布/订阅系统,这样如果做的集群之间数据同步和一致性,kafka 是不是肯定不会丢消息呢?以及宕机的时候如果进行 Leader 选举呢? 在 Kafka 中的 Partition 有一个 leader 与多个 follower,producer 往某个 Partition 中写入数据是,只会往 leader 中写入数据,然后数据才会被复制进其他的 Replica 中。而每一个 follower 可以理解成一个消费者,定期去 leader 去拉去消息。而只有数据同步了后,kafka 才会给生产者返回一个 ACK 告知消息已经存储落地了。 上述的做法并无法保证 kafka 一定不丢消息。 虽然 Kafka 通过多副本机制中最大限度保证消息不会丢失,但是如果数据已经写入系统 page cache 中但是还没来得及刷入磁盘,此时突然机器宕机或者掉电,那消息自然而然的就会丢失。 Kafka 故障恢复实现一个小demo 参考文献: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 0:25:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |