Kafka详细分析
前面说过Kafka主要包括:客户端,Broker,ZK,消费者四块内容。
1. 客户端
客户端的作用为收集消息,将消息正确的发送到客户端。
1.1 消息
客户端的消息包括:CRC,版本号,Key,Length,属性,Value
1.2 客户端和ZK
客户端启动之前需要指定ZK地址,客户端需要ZK来获取Broker信息。
客户端启动时的步骤:
1. 客户端向ZK注册自己,获取所有的Broker leader地址
2. Watch Broker的变动,Broker发生变动后,会自动调整发送的位置,重新做负载均衡
3. 发送消息
1.3 负载均衡
客户端支持多种负载均衡方式。
- 轮询:遍历Broker发送消息
- Hash:对Key进行Hash发到不同的Broker
2 消费者
消费者用来消费消息的。和生产者一样,消费者也是需要先和ZK打交道。
2.1 消息
消费者收到的消息包含了:消息实体,partition,offset,CRC等信息
2.2 和ZK关系
客户端启动时的步骤:
1. 消费者向ZK注册自己,获取所有的Broker leader地址。
2. Watch Broker的变动
3. Watch Other Consumer的加入和退出
2.3 负载均衡
消费者负载均衡由两方面引起:
1. Broker变动
2. Consumer变动
负载均衡方案很简单:n = Partition Count / Consumer Count 向下取整。每个
Consumer负责n个Partition。
比如Partition id为:1,2,3,4,5
两个Consumer id为:A,B
则A负责1,2;B负责:3,4,5
2.4 Consumer API
目前0.9版本之前,只有High Consumer API和Simple Consumer API两套接口。
High API比较好用,采用流式消费的方式,支持自动Commit,但是不支持offset的设
置,无法手动设置offset。
Simple API接口丰富,功能强大,巨难用。需要消费者自己发送http请求获取消息,
自己管理offset,自己维护broker的变更。
好消息是0.9版本之后(包括0.9)提供了KafkaClient,基本上包含了常用的一些请
求,但据说多线程会有问题。
3 Broker
broker集群主要解决以下几个问题:
- 消息备份
- follow失效和重启
- leader失效
- 所有Replicas失效
3.1 消息备份
Kafka的每个partition包括一个leader broker和若干个follow broker(可以为0),那么消息如何进行同步就比较重要。常见的方式为:同步备份,异步备份。
同步备份
client发送消息到leader之后,leader会将数据写入Cache并flush到磁盘,修改HW,之后follow去拉取消息,将消息写入cache,不用等待flush到磁盘就返回ack影响,leader收到所有follow的ack后向client发送ack,并标记消息为commited状态,只有commited状态的消息才能被消费。follow在cache积累一定量消息或者达到一定时间后会flush到磁盘,再更新本地的HW。
流程为:
1. Client发送消息
2. leader写入消息,修改HW
3. follow同步消息到cache,发送ack
4. leader向client发送ack
5. client发送下一条
6. follow flush到磁盘,更新HW
异步备份
Client可以选择异步发送,不用等待Leader的确认。而Leader也不会等待全部follow同步数据。Leader允许follow落后一些消息(可配置),这样follow可以批量拉取数据,增强了消息备份的性能。
3.2 follow失效和重启
follow存活必须满足两个条件:
1. follow没有down掉
2. follow没有落后leader太多
leader会跟踪一个ISR(in-sync Replicas),当发现follow没有存活时,会自动将其从ISR中删除。follow重启后,自动读取本地保存的HW,删除HW之后的数据,再从leader进行消费,追上leader后会被加入ISR。
3.3 leader失效
ZK里面动态维护了一个ISR,可以认为这个ISR里面所有的follow都跟上了leader,选择新的leader只能从ISR里面产生,当一个leader失效以后,ZK会选择第一个向ZK注册并在ISR里面的follow为leader。选出leader后,其它的follow会同步新leader的HW,保持本地的HW和leader的一致,之后新leader就可以进行工作。
3.4 所有Replicas失效
当只有一个Replicas还存活的时候,kafka就可以正常进行工作。如果kafka所有的Replicas都失效了,有以下两种方案:
1. 等待ISR中任意一个Replicas活过来,并作为leader
2. 选择任意一个Replicas活过来,并作为leader
目前Kafka选择了第二种方式。后续Kafka可能会采取用户可配方式。
相关推荐
例如,Kafka会使用ZooKeeper来管理Broker列表、主题配置以及消费者的偏移量信息。 **4. Kafka的设计要点** - **高性能:** Kafka采用了高效的日志文件存储机制,并利用零拷贝技术提高读写性能。 - **可扩展性:** ...
- 心得总结通常包含了实际使用中的经验教训和技巧,对于提升Kafka应用水平非常有价值。 6. **安装与配置** - 安装包提供了Kafka的二进制文件,包含启动脚本和配置文件,用户可以按照官方文档的指导进行安装和配置...
4. 算法模型:使用机器学习算法对数据进行分析和计算。 5. Kafka 处理数据:使用 Kafka 消息队列系统对数据进行处理和存储。 6. Spark 流式计算:使用 Spark 基于内存的分布式计算系统对数据进行高速计算和分析。 7....
说明手册本工程是按照 (使用事件和消息队列实现分布式事务)这个文章实现的。目前实现了注册用户成功...这篇文章学习心得:1.上面文章中的第2个图的EventPublish应该是EventProcess,至于为什么要把EventPublish和EventP
主要功能提供了快速使用 spark streaming + kafka 开发流式程序的骨架,示例中的代码大部分都加上了详细的注释提供了手动管理kafka的offset存储到zookeeper的方法,并解决了一些bug,如kafka扩容分区,重启实
### 大数据心得知识点概述 #### 一、大数据时代的背景与意义 - **时代背景**:随着信息技术的迅速发展,互联网、移动通信等技术的进步,数据量呈现出爆炸性增长的趋势。这种现象不仅体现在日常生活中的社交媒体、...
本文将深入探讨在Spring中如何利用多线程和动态任务来实现异步处理,并分享一些实践心得。 首先,我们要理解Spring的异步处理机制。Spring通过`@Async`注解实现了方法级别的异步执行。当一个带有`@Async`的方法被...
在这份题为“亿级大数据实时分析之旅v520.pdf”的文档中,欧阳辰详细分享了小米在大数据实施中的心路历程,包括不同阶段的实施、关键组件的选型等,下面将对此进行详细的知识点梳理。 ### 大数据的价值与挑战 ...
下面是使用过程中记录的一些心得和博客,感兴趣的朋友可以了解下: (1) (2) (3) (4) (5) (6) (7) (8) 项目简介 该项目提供了一个在使用spark streaming2.1+kafka0.9.0.0的版本集成时,手动存储偏移...
此文用于汇总PHP7 / Redis5 / Nginx / Linux / Mysql / Kafka / ElasticSearch / Etcd / Zookeeper等学习源码过程中的思考,整理与心得体会,后面会不断更新 个人博客链接地址如下: 【梦幻人生-用技术来点缀自己的...
3. **技术选型**:对比分析各种消息中间件的优缺点,如RabbitMQ的AMQP协议、Kafka的高吞吐量特性、ActiveMQ的易用性等,帮助读者选择适合的中间件。 4. **实战教程**:提供从安装、配置到实际编程的步骤,可能包括...
4. **编程学习周报**:可能包含了每周的编程学习心得、技术热点、新出的技术趋势或者开源项目分享,有助于保持技术敏感度和学习习惯。 5. **工作总结**:记录了开发过程中的问题与解决方案,可能涉及性能优化、bug...
《大型分布式网站架构设计与实践》是陈康贤的一本深入探讨分布式系统构建的著作,主要针对互联网行业的架构设计挑战提供了宝贵的实践...同时,结合文中提到的源码分析和工具使用,有助于读者深入理解并掌握这些技术。
这份"大数据面试题及面试经验分享.zip"压缩包可能包含了各种面试常问问题、经典案例分析以及面试者在求职过程中的心得体会。以下是一些可能涵盖的大数据相关知识点: 1. **大数据基础知识**:面试通常会从基础概念...
4. 数据分析:运用机器学习算法,如协同过滤、主题模型等,进行用户行为分析和兴趣挖掘。 5. 推荐引擎:根据用户历史行为和偏好,生成个性化推荐列表。 6. 实时更新:通过消息队列(如Kafka)实现实时数据流处理,...
本文将详细介绍芒果TV在ELK(Elasticsearch、Logstash、Kibana)日志系统实践中的经验与心得,特别是针对日志收集、存储、分析等环节的关键技术和优化策略。 #### 二、背景介绍 在2015年10月17日举办的ES国内...
- **社区论坛**:设立在线交流平台,鼓励开发者分享经验心得、解答疑问。 - **培训课程**:定期举办线上/线下培训活动,提升开发者技能水平。 综上所述,通过构建完善的大数据平台及数据治理体系,不仅能够有效提升...
4. **性能监控与调优**:老白可能会讲解如何使用各种工具进行数据库性能监控,分析查询瓶颈,并提供优化建议,如SQL查询优化、存储过程优化等。 5. **高可用性与容灾**:这部分可能涉及主从复制、读写分离、集群...
笔记中可能详细解析了以上知识点的应用场景、配置方式以及实战案例,同时通过Typora编辑的文本文件,可能还包括了代码示例和学习心得。图片资源则可能辅助展示了配置过程或错误排查步骤,使得学习更加直观。对于正在...
在当今快节奏的社会中,人们面临着各种心理压力,心灵治愈交流平台的出现为用户提供了一个舒缓情绪、分享心得的在线空间。本项目采用SpringBoot框架进行开发,结合Java技术,旨在打造一个高效、安全、易用的心灵治愈...