Kafka是什么?为什么拥有异步、削峰、解耦?有哪些角色? |
您所在的位置:网站首页 › 锋的意思是什么 › Kafka是什么?为什么拥有异步、削峰、解耦?有哪些角色? |
一、Kafka是什么?
Kafka是一个分布式消息中间件,支持分区的、多副本的、多订阅者的、基于zookeeper协调的分布式消息系统。 通俗来说: kafka就是一个存储系统,存储的数据形式为“消息”; 它的主要作用类似于蓄水池,起到一个缓冲作用; 二、为什么拥有解耦、异步、削峰?(1)解耦 传统模式:
传统模式的缺点: 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!中间件模式: 中间件模式的的优点: 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。(2)异步 传统模式:
传统模式的缺点: 一些非必要的业务逻辑以同步的方式运行,太耗费时间。中间件模式:
中间件模式的的优点: 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度(3)削峰 传统模式
传统模式的缺点: 并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常中间件模式: 中间件模式的的优点: 系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。 三、Kafka中有哪些角色?消息生产者,就是向kafka broker 发消息的客户端。 2、consumerconsumer :消息消费者,从kafka broker 取消息的客户端。 consumer group:单个或多个consumer可以组成一个consumer group;这是 kafka 用来实现消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个Consumer Group。 3、topic 数据的逻辑分类;可以理解为数据库中“表”的概念; (1)partition:topic中数据的具体管理单元;(可以理解为hbase中表的“region”概念) 一个topic 可以划分为多个partition,分布到多个 broker上管理; 每个partition由一个kafka broker服务器管理; partition 中的每条消息都会被分配一个递增的id(offset); 每个 partition 是一个有序的队列,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个 partition 间)的顺序。 每个partition都可以有多个副本; 分区对于 kafka 集群的好处是:实现topic数据的负载均衡。分区对于消费者来说,可以提高并发度,提高效率。 (2)broker 一台 kafka 服务器就是一个 broker。 一个kafka集群由多个 broker 组成。 一个 broker 可以容纳多个 topic的多个partition。 (3)offset 消息在底层存储中的索引位置,kafka底层的存储文件就是以文件中第一条消息的offset来命名的,通过offset可以快速定位到消息的具体存储位置; 4、Leaderpartition replica中的一个角色,producer和consumer只跟leader交互(负责读写)。 5、副本Replicapartition的副本,保障partition的高可用(replica副本数目不能大于kafka broker节点的数目,否则报错。) 每个partition的所有副本中,必包括一个leader副本,其他的就是follower副本 6、Followerpartition replica中的一个角色,从leader中拉取复制数据(只负责备份)。 如果leader所在节点宕机,follower中会选举出新的leader; 7、偏移量Offset每一条数据都有一个offset,是数据在该partition中的唯一标识(其实就是消息的索引号)。 各个consumer会保存其消费到的offset位置,这样下次可以从该offset位置开始继续消费; consumer的消费offset保存在一个专门的topic(__consumer_offsets)中;(0.10.x版本以前是保存在zk中) 8、消息Message在客户端编程代码中,消息的类叫做 ProducerRecord; ConsumerRecord; 简单来说,kafka中的每个massage由一对key-value构成
各个字段的含义介绍如下: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |