首页 > 其他 > 详细

kafka学习

时间:2019-08-26 15:00:53      阅读:82      评论:0      收藏:0      [点我收藏+]

1. 为何需要消息服务
2. 消息中间件的发展历史
3. 业界对比
4. 基本概念介绍
5. 操作实战

基于消息中间件构建消息服务,解决云分布式场景的消息通信问题,提供高可靠,高性能(高并发,高吞吐),高扩展的消息管道

优点:

1.系统解耦, 基于发布订阅模型,分布式应用异步解构,可以增加应用的水平扩展性,增加前端应用快速反应能力

2.削峰填谷, 大促等流量突然来袭时,消息服务可以缓冲突发流向,避免整个系统崩溃。

3. 数据交换, 解决跨DC传输,通道安全可靠,服务可用的问题

4.异步通知, 海量终端接入,高吞吐,低延迟

5.日志通道, 作为重要日志监控通信管道,将应用日志监控对系统性能影响降到最低。

技术分享图片

 

消息中间件,是指支持与保证分布式应用程序之间同步/异步接受消息的中间价,通过消息中间价,应用程序或组件之间可以进行可靠的异步通讯来降低系统之间的耦合度,从而提高整个系统的可宽展行和可用性。

 

业界分布式mq横向对比分析

技术分享图片

 

 

kafka: 是一种分布式、基于发布/订阅的消息中间价

1. 高性能、高吞吐:  消息是追加写盘,顺序写盘、充分利用磁盘IO、消息可以在client端压缩,发送到server端,提升了性能。

2. 在线扩容 :  分区机制,在线扩容, 副本在线扩容, 节点broker在线扩容。

3. 高可靠  集群部署、多副本机制: 多副本机制,支持在线扩容,支持分区在线迁移。

 

kafka基本概念:

1. broker: kafka集群包含一个或者多个服务实例,之中服务实例被称作broker。

2. topic: 每条发布到kafka集群的消息都有一个类别,这个类别被称作topic

3. partition:  分区是物理上的概念,每个topic包含一个或者多个分区。

4.producer: 负责发布消息到kafka broker。

5. consumer: 消息消费者,向kafka broker 读取消息的客户端。

6. consumer group: 每个consumer 属于一个特定的consumer group(可为每个consumer指定group name,否则属于默认的group)

 

4.1 kafka批量生产机制,并且是异步的

1. 当一条消息在发送的时候,首先会在本地进行缓存,会根据这条消息属于那个分区,放入到不同的Batch,放到不同的包里。

2. 异步线程会从缓冲区里取消息,把发往同一个broker的batch打包,然后放到同一个请求里,再发送到broker。

 

技术分享图片

 

 

 

 4.2 kafka 分区副本

1. kafka通过副本方式达到高可用的目标,每个分区可以有一个或者多个副本,分别分配在不同的节点上。

2. 多个副本之间只有一个leader,其他副本通过pull模式同步leader消息,处于同步状态的副本集合称为ISR

3. 生产者和消费者都只能从leader写入或者读取数据,leader故障后,会有线从ISR集群中选择副本作为leader

4. ISR同步副本的集合。

 

4.3 kafka  partition &  offset

技术分享图片

 

1.  每个分区消息只能通过追加消息的方式增加消息,消息都有一个偏移量(offset),顺序写入保证性能高效

2. 消费者通过分区中offset 定位消费和记录消费的位置。

 

4.4 kafka消费者组合分区。

1. 每个消费者都属于一个消费组,通过消费组概念可以实现topic消息的广播(发送所有消费组)或者单播(组内消息均衡分担)

2. 消费者采用pull模式进行消费,方便消费进度记录在客户端,服务端无状态。

3. 组内的消费者以topic 分区个数进行衡量分配,所有组内消费者最多只能有分区个数的消费者。

 

4.7 kafka 高可用机制

分布式系统下,单点故障不可避免,kafka如何管理节点故障。

1. 从kafka的broker 中选择一个节点作为分区管理与副本状态变更的控制,称为controller

2. 统一监听zk元数据变化,通知各节点状态信息。

3. 管理broker节点的故障恢复, 对故障节点所在分区进行重新leader选举,帮助业务故障切换到新的broker

 

如果controller节点本身故障

各个broker节点通过watch zk的/controller节点,如果controller故障,会出发节点进行争夺创建/controller节点,创建上的节点称为新的controller.

 

kafka学习

原文:https://www.cnblogs.com/fengjian2016/p/11412469.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!