`

Kafka使用心得(4)—Kafka详细分析

 
阅读更多

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学习之路

    例如,Kafka会使用ZooKeeper来管理Broker列表、主题配置以及消费者的偏移量信息。 **4. Kafka的设计要点** - **高性能:** Kafka采用了高效的日志文件存储机制,并利用零拷贝技术提高读写性能。 - **可扩展性:** ...

    kafka学习资料.zip

    - 心得总结通常包含了实际使用中的经验教训和技巧,对于提升Kafka应用水平非常有价值。 6. **安装与配置** - 安装包提供了Kafka的二进制文件,包含启动脚本和配置文件,用户可以按照官方文档的指导进行安装和配置...

    微博热搜情绪分析.docx

    4. 算法模型:使用机器学习算法对数据进行分析和计算。 5. Kafka 处理数据:使用 Kafka 消息队列系统对数据进行处理和存储。 6. Spark 流式计算:使用 Spark 基于内存的分布式计算系统对数据进行高速计算和分析。 7....

    study-spring-kafka

    说明手册本工程是按照 (使用事件和消息队列实现分布式事务)这个文章实现的。目前实现了注册用户成功...这篇文章学习心得:1.上面文章中的第2个图的EventPublish应该是EventProcess,至于为什么要把EventPublish和EventP

    sparkStreaming-offset-to-zk:手动管理spark streaming集成kafka的数据偏移量到zookeeper中

    主要功能提供了快速使用 spark streaming + kafka 开发流式程序的骨架,示例中的代码大部分都加上了详细的注释提供了手动管理kafka的offset存储到zookeeper的方法,并解决了一些bug,如kafka扩容分区,重启实

    [详细完整版]大数据心得.doc

    ### 大数据心得知识点概述 #### 一、大数据时代的背景与意义 - **时代背景**:随着信息技术的迅速发展,互联网、移动通信等技术的进步,数据量呈现出爆炸性增长的趋势。这种现象不仅体现在日常生活中的社交媒体、...

    Spring 异步多线程动态任务处理的使用心得

    本文将深入探讨在Spring中如何利用多线程和动态任务来实现异步处理,并分享一些实践心得。 首先,我们要理解Spring的异步处理机制。Spring通过`@Async`注解实现了方法级别的异步执行。当一个带有`@Async`的方法被...

    亿级大数据实时分析之旅v520.pdf

    在这份题为“亿级大数据实时分析之旅v520.pdf”的文档中,欧阳辰详细分享了小米在大数据实施中的心路历程,包括不同阶段的实施、关键组件的选型等,下面将对此进行详细的知识点梳理。 ### 大数据的价值与挑战 ...

    streaming-offset-to-zk:一个手动管理spark streaming集成kafka时的偏移量到zookeeper中的小项目

    下面是使用过程中记录的一些心得和博客,感兴趣的朋友可以了解下: (1) (2) (3) (4) (5) (6) (7) (8) 项目简介 该项目提供了一个在使用spark streaming2.1+kafka0.9.0.0的版本集成时,手动存储偏移...

    lnmp-code-analysis:PHP7Redis5NginxLinuxMysqlKafkaElasticSearchEtcd等等往复原理以及源码分析

    此文用于汇总PHP7 / Redis5 / Nginx / Linux / Mysql / Kafka / ElasticSearch / Etcd / Zookeeper等学习源码过程中的思考,整理与心得体会,后面会不断更新 个人博客链接地址如下: 【梦幻人生-用技术来点缀自己的...

    消息中间件学习案例与总结

    3. **技术选型**:对比分析各种消息中间件的优缺点,如RabbitMQ的AMQP协议、Kafka的高吞吐量特性、ActiveMQ的易用性等,帮助读者选择适合的中间件。 4. **实战教程**:提供从安装、配置到实际编程的步骤,可能包括...

    大厂超级详细的Java面试题.zip

    4. **编程学习周报**:可能包含了每周的编程学习心得、技术热点、新出的技术趋势或者开源项目分享,有助于保持技术敏感度和学习习惯。 5. **工作总结**:记录了开发过程中的问题与解决方案,可能涉及性能优化、bug...

    读书心得--大型分布式网站架构设计与实践(陈康贤)

    《大型分布式网站架构设计与实践》是陈康贤的一本深入探讨分布式系统构建的著作,主要针对互联网行业的架构设计挑战提供了宝贵的实践...同时,结合文中提到的源码分析和工具使用,有助于读者深入理解并掌握这些技术。

    大数据面试题及面试经验分享.zip

    这份"大数据面试题及面试经验分享.zip"压缩包可能包含了各种面试常问问题、经典案例分析以及面试者在求职过程中的心得体会。以下是一些可能涵盖的大数据相关知识点: 1. **大数据基础知识**:面试通常会从基础概念...

    网络游戏-手机网络资讯导航系统及其实现方法.zip

    4. 数据分析:运用机器学习算法,如协同过滤、主题模型等,进行用户行为分析和兴趣挖掘。 5. 推荐引擎:根据用户历史行为和偏好,生成个性化推荐列表。 6. 实时更新:通过消息队列(如Kafka)实现实时数据流处理,...

    芒果TV ELK日志系统实践 -刘波涛

    本文将详细介绍芒果TV在ELK(Elasticsearch、Logstash、Kibana)日志系统实践中的经验与心得,特别是针对日志收集、存储、分析等环节的关键技术和优化策略。 #### 二、背景介绍 在2015年10月17日举办的ES国内...

    199-大数据平台及数据治理整体方案.docx

    - **社区论坛**:设立在线交流平台,鼓励开发者分享经验心得、解答疑问。 - **培训课程**:定期举办线上/线下培训活动,提升开发者技能水平。 综上所述,通过构建完善的大数据平台及数据治理体系,不仅能够有效提升...

    [老白]DBA日记

    4. **性能监控与调优**:老白可能会讲解如何使用各种工具进行数据库性能监控,分析查询瓶颈,并提供优化建议,如SQL查询优化、存储过程优化等。 5. **高可用性与容灾**:这部分可能涉及主从复制、读写分离、集群...

    SpringCloud笔记.rar

    笔记中可能详细解析了以上知识点的应用场景、配置方式以及实战案例,同时通过Typora编辑的文本文件,可能还包括了代码示例和学习心得。图片资源则可能辅助展示了配置过程或错误排查步骤,使得学习更加直观。对于正在...

    springboot心灵治愈交流平台系统的设计与实现

    在当今快节奏的社会中,人们面临着各种心理压力,心灵治愈交流平台的出现为用户提供了一个舒缓情绪、分享心得的在线空间。本项目采用SpringBoot框架进行开发,结合Java技术,旨在打造一个高效、安全、易用的心灵治愈...

Global site tag (gtag.js) - Google Analytics