Topic中的所有数据分布式的
存储在kafka集群的所有机器(broker)上,以分区(partition)的的形式进行数据存储;每个分区允许存在备份数据/备份分区(存储在同一kafka集群的其它broker上的分区)。
每个数据分区在Kafka集群中存在一个broker节点上的分区叫做leader,存储在其它broker上的备份分区叫做followers;只有leader节点负责该分区的数据读写操作,followers节点作为leader节点的热备节点,从leader节点备份数据;当leader节点挂掉的时候,followers节点中会有一个节点变成leader节点,重新提供服务
Kafka集群的Partition的leader和followers切换依赖Zookeeper
Kafka分布式保证的第一个特性就是:Kafka的Replication
Kafka的Replication指的是Partition的复制,一个Partition的所有分区中只有一个分区是leader节点,其它分区是follower节点。
Replication对Kafka的吞吐率有一定的影响,但是极大的增强了可用性
Follower节点会定时的从leader节点上获取增量数据,一个活跃的follower节点必须满足一下两个条件:
1.所有的节点必须维护和zookeeper的连接(通过zk的heartbeat实现)
2.follower必须能够及时的将leader上的writing复制过来,不能“落后太多”; “落后太多”由参数
{replica.lag.time.max.ms}和
{replica.lag.max.messages}决定。
Kafka分布式保证的第二个特性就是:Kafka Leader Election
Kafka提供了一个in-sync replicas(ISR)来确保Kafka的Leader选举,ISR是一个保存分区node的集合,如果一个node宕机了或数据“落后太多”,leader会将该node节点从ISR中移除,只有ISR中的follower节点才有可能成为leader节点
Leader节点的切换基于Zookeeper的Watcher机制,
当leader节点宕机的时候,其他ISR中的follower节点会竞争的在zk中创建一个文件目录(只会有一个follower节点创建成功),创建成功的follower节点成为leader节点
一个Topic分为多个Partition来进行数据管理,
一个Partition中的数据是有序、不可变的,使用偏移量(offset)唯一标识一条数据,是一个long类型的数据。
Partition接收到producer发送过来数据后,会产生一个递增的offset偏移量数据,同时将数据保存到本地的磁盘文件中
(文件内容追加的方式写入数据);Partition中的数据存活时间超过参数值(log.retention.{ms,minutes,hours},默认7天)的时候进行删除(默认)
Consumer根据offset消费对应Topic的Partition中的数据(也就是每个Consumer消费的每个Topic的Partition都拥有自己的offset偏移量)
注意:Kafka的数据消费是顺序读写的,磁盘的顺序读写速度(600MB/sec)比随机读写速度(100k/sec)快。
一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成。
header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成。当magic的值为1的时候,会在magic和crc32之间多一个字节的数据:attributes(保存一些相关属性,比如是否压缩、压缩格式等等);如果magic的值为0,那么不存在attributes属性
body是由N个字节构成的一个消息体,包含了具体的key/value消息
存储在磁盘的日志采用不同于Producer发送的消息格式,每个日志文件都是一个“log entries”序列,每一个log entry包含一个四字节整型数(message长度,值为1+4+N),一个字节的magic,四个字节的CRC32值,最终是N个字节的消息数据。每条消息都有一个当前Partition下唯一的64位offset,指定该消息的起始下标位置,存储消息格式如下:
这个“log entries”并非由一个文件构成,而是分成多个segment file(日志文件,存储具体的消息记录)和一个索引文件(存储每个segment文件的offset偏移量范围)。 结构如图所示:
转自:
http://www.cnblogs.com/liuming1992/p/6425536.html
- 大小: 18.7 KB
- 大小: 226.5 KB
分享到:
相关推荐
**大数据采集技术与Kafka的消息存储机制** 大数据采集技术在当今的信息时代中扮演着至关重要的角色,它涉及从各种来源收集、处理和分析大量数据。Kafka作为一个高效、可扩展的分布式流处理平台,尤其在大数据采集和...
Kafka 文件存储机制可以分为四个步骤:topic 中 partition 存储分布、partition 中文件存储方式、partition 中 segment 文件存储结构、在 partition 中如何通过 offset 查找 message。 Topic、Partition、Segment ...
下面是kafka的原理文档,涵盖了kafka的架构、设计理念、消息模型、 Partition机制、日志策略、消息可靠性机制等方面。 一、kafka架构 kafka的架构主要包括以下几个部分: *Broker:kafka集群中的每个节点称为...
### Kafka核心原理与实战 #### 一、Kafka概述与特点 Kafka是一款开源的分布式消息系统,由...通过对Kafka的基本概念、配置文件、API编程、存储原理等方面的深入理解,可以帮助开发者更好地利用Kafka解决实际问题。
kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列...
通过阅读《深入理解Kafka:核心设计与实践原理》这本书,读者可以深入了解Kafka的内部工作机制,掌握如何在实际项目中有效地利用Kafka解决消息传递、数据流处理等问题,提升系统的可靠性和性能。
**KAFKA分布式消息系统在Windows环境下的搭建与应用** KAFKA是一个高吞吐量的分布式消息系统,由LinkedIn开发并开源,现在是Apache软件基金会的...通过不断学习和实践,我们可以更好地掌握Kafka这一高效的消息中间件。
kafka原理优化及参数。 可恢复性 系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。 顺序保证 在...
### Apache Kafka概述及原理 #### 一、Apache Kafka简介 Apache Kafka是一款开源的分布式流处理平台,由LinkedIn公司创建,并于2011年捐赠给Apache软件基金会,现已成为Apache顶级项目之一。Kafka主要用于构建实时...
**大数据采集技术与Kafka的消息队列机制** 大数据采集技术是现代信息技术中不可或缺的一部分,它涉及到数据的收集、处理和存储。在这个过程中,消息队列作为数据传输的关键组件,起着至关重要的作用。本篇文章将...
1.可用于查看kafka内的消息数据,消息的偏移量,消费分组数等信息。 2.主要用于开发调试,勿过于依赖辅助工具,命令使用才是根本。
运维,java开发,消息中间件,Kafka原理剖析及实战演练视频教程,刚刚买的
- **Broker**:Kafka集群中的服务器节点,负责存储和转发消息。 - **Topic**:消息的分类,每个主题可以包含多个分区(Partition)。 - **Partition**:每个主题的逻辑分割,分布在不同的Broker上,确保高可用性...
### Kafka学习之路——详解Kafka原理与架构 #### 一、Kafka简介 Kafka是一款由LinkedIn开发并开源的消息队列系统,它主要用于处理实时数据流,并能够支持在线和离线的日志处理需求。Kafka的基本特性包括高吞吐量、...
消息中间件kafka 进行消息的分发和接收示例 应用中包含分通道发送和多线程接收
一个完整的Kafka集群通常包含多个Broker,它们共同承担消息的存储与转发任务。 2. **Topic**:在Kafka中,消息被组织成Topic。Topic类似于消息队列的名字,它是一个逻辑概念,代表了一个消息分类或主题。一个Topic...
Kafka 通过各种机制来确保消息的可靠传输和存储,包括消息持久化、复制机制和同步机制等。这些机制确保了 Kafka 的高可用性和高吞吐量。 6. Topic 和 Partition Kafka 通过 Topic 和 Partition 来管理消息。每个 ...
### Flume采集数据到Kafka,然后从Kafka取数据存储到HDFS的方法思路和完整步骤 #### 一、概述 随着大数据技术的发展,高效的数据采集、处理与存储变得尤为重要。本文将详细介绍如何利用Flume采集日志数据,并将其...
在本文中,我们将深入探讨如何使用C#语言从Apache Kafka中读取消息。Apache Kafka是一个分布式流处理平台,常用于构建实时数据管道和流应用程序。C#作为.NET框架的主要编程语言,提供了丰富的库来与Kafka进行交互。...