分布式消息系统kafka入门和kafka原理解析

关于kafka:kafka是Linkedin于2010年开源的消息系统,是一个分布式的基于发布/订阅模式的消息队列,主要用于处理活跃的流式数据。传统的日志分析系统提供了一种离线处理日志信息的可扩展方案,若要进行实时处理,通常会有较大的延迟,而现有的消息(队列)系统能很好的处理实时或者近似实时的应用,但未处理的数据通常不会写在磁盘上,这对于hadoop之类的的离线应用可能存在问题。kafka正是为了解决以上问题而设计的,它能很好的支持离线和在线应用。

1.关于kafka消息队列好处:
(1)解耦:
允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。这里举个简单的例子,假如你修手机的时候你和修理员可以分别看成是两个系统,但是呢你没必要在修理员修手机的时候一直在那里等,你可以去超市买好东西,去吃个饭在回来拿手机。也即是彼此两个系统所处理的事情可以不需要同时进行。
(2)可恢复性:
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
(3)削峰:
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃

2.消息队列中的两种模式
(1)点对点消息系统(一对一,消费者主动拉取数据,消息收到后消息清除)
在点对点系统中,消息被保留在队列中。 一个或多个消费者可以消耗队列中的消息,但是特定消息只能由最多一个消费者消费。 一旦消费者读取队列中的消息,它就从该队列中消失。 该系统的典型示例是订单处理系统,其中每个订单将由一个订单处理器处理,但多个订单处理器也可以同时工作。 下图描述了结构。

在这里插入图片描述

(2)发布 - 订阅消息系统(一对多,消费者消费数据之后不会清除消息)
在发布 - 订阅系统中,消息被保留在主题中。 与点对点系统不同,消费者可以订阅一个或多个主题并使用该主题中的所有消息。 在发布 - 订阅系统中,消息生产者称为发布者,消息使用者称为订阅者。 一个现实生活的例子是Dish电视,它发布不同的渠道,如运动,电影,音乐等,任何人都可以订阅自己的频道集,并获得他们订阅的频道时可用。

在这里插入图片描述

3.kafka的架构

在这里插入图片描述

关于上图中的一些基本概念

1)Producer :消息生产者,就是向kafka broker发消息的客户端;
2)Consumer :消息消费者,向kafka broker取消息的客户端;
3)Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
4)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic
6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列;
7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower
8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。
9)follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。

注:早期版本的 kafka 用 zk 做 meta 信息存储,consumer 的消费状态,group 的管理以及 offse t的值。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题,新版本中确实逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖

kafka的原理解析

1.主要的设计理念。
Katka之所以和其他绝大多数信息系统不同,是由下面这几个为数不多的比较重要的设计理念决定的:
(1)Kafka在设计之时,就将持久化消息作为通常的使用情况进行考虑。
(2)Kafka主要的设计约束是吞吐量而不是功能。
(3)和Kafka有关的那些已经被使用了的状态信息保存为数据消费者(Consumer)的一部分,而不是保存在服务器之上。
(4)Kafka是一种显式的分布式系统。它假设数据生产者(Producer)、代理(Broker)和数据消费者(Consumer)分散于多台机器之上。

2.zookeeper在kafka中的作用

(1) 无论是Kafka集群还是 Producer 和Consumer,都靠 ZooKeeper 来保证系统可用性,集群保存一些meta元信息。
(2) Kafka 使用 ZooKeeper作为其分布式协调框架,很好地将消息生产、消息存储、消息消费的过程结合在一起。
(3)借助ZooKeeper的作用,Kafka能够将生产者、消费者和Broker在内的所有组件在无状态的情况下,建立起生产者和消费者的订阅关系,并实现生产者与消费者的负载均衡。
(4)Kafka增加和减少服务器都会在ZooKeeper节点上触发相应的事件,Kafka系统会捕获这些事件,进行新一轮的负载均衡,客户端也会捕获这些事件来进行新一轮的处理。

3.kafka在zookeeper中的执行流程

在这里插入图片描述

在上面的流程图中我们可以得出下面的结论。

(1)Serverl 就是 Kafka 的 Server,因为 Producer 和 Consumer 都要使用它,Broker 主要还是作为存储使用。
(2)Server2 是ZooKeeper的Server端,记录了各个节点的 IP、端口等信息。
(3)Server3、 Server4、 Server5 的共同之处就是都配置了zkClient,更明确地说就是运行前必须配置 ZooKeeper的地址,这之间的连接都需要ZooKeeper来进行分发。
(4)Serverl 和 Server2 可以放在一台机器上,也可以分开放。ZooKeeper也可以配成集群,目的是防止某一台ZooKeeper服务器异常宕机。

猜你喜欢

转载自blog.csdn.net/weixin_44080445/article/details/107287767
今日推荐