Kafka(五)Kafka分区与副本

Kafka分区和副本都是由副本管理器所管理的,引入副本就是为了提高可用性,整个集群中如何判断代理是否存活?

  • 一个存活的代理必须与Zookeeper保持连接,通过Zookeeper的心跳机制来实现的
  • 作为一个Follower副本,该副本不能落后Leader副本太久(怎么算太久?)replica.lag.max.messages配置项确定的,默认为10秒。

满足上面2个条件则认为该副本或者节点处于同步中(in sync)。Leader副本会追中所有同步中的节点,一旦一个节点宕机或者落后太久,Leader就会将该节点从同步副本中ISR列表中移除。Follower从Leader副本同步数据不是同步也不是单纯的异步。Kafka采用了一个同步列表的方式来做了同步和异步的折中。

分区:

将一个主题分成一个或多个分区,物理上对应一个目录。每个主题的分区编号都是唯一的,从0开始。分区目录下存储的是该分区的日志段,包括日志数据文件和两个索引文件。分区数可以大于节点数,但是副本数不能大于节点数量。创建主题是分区数量最好为代理数量的整数倍。

LEO:每个分区最后一条消息的位置,每个副本都有自己的LEO

HW:ISR列表中最小的LEO作为一个分区的HW。HW之前表示已经提交的消息,消费者只能消费已经提交的,HW之后的消息消费者不能消费,因为HW之后的消息表示还没有被ISR列表中的Follower同步。

也就是说消息写入到所有副本的日志中才算提交,才可以被消费者消费。这是对消费者来说的,生产者是否要等待消息都被写入所有副本之后才收到返回是另外一回事,这个可以通过acks来配置,kafka为生产者提供3种消息确认机制(request.required.acks参数):

  • acks=0,生产者无需等待代理返回确认,就是可以连续发送,但是无法保证消息是否被代理收到。
  • acks=1,生产者需要等待Leader副本以及成功写入日志。这种方式降级了消息丢失的可能性,但是也只是Leader写入日志而不管Follower是否写入。
  • acks=-1,Leader副本和所有Follower都写入日志才会向生产者发送确认信息。

副本:

一个分区可有一个或多个副本,Leaeder副本用于接收读写请求,Follower副本用于做备份,一个分区只能有一个Leader和0个或多个Follower,Leader副本处理分区的所有读写请求并维护自身以及Follower副本的状态。当Leader副本失效时,会从Follower副本中选举一个新的Leader副本对外提供读写服务。

原文地址:http://blog.51cto.com/littledevil/2145872

时间: 2024-10-14 09:40:44

Kafka(五)Kafka分区与副本的相关文章

kafka之partition分区及副本replica升级

修改kafka的partition分区 bin/kafka-topics.sh --zookeeper datacollect-2:2181 --alter --partitions 3 --topic client-agent-1 修改kafka副本数 官网解释如下: Increasing replication factor Increasing the replication factor of an existing partition is easy. Just specify the

kafka 分区和副本以及kafaka 执行流程,以及消息的高可用

1.Kafka概览 Apache下的项目Kafka(卡夫卡)是一个分布式流处理平台,它的流行是因为卡夫卡系统的设计和操作简单,能充分利用磁盘的顺序读写特性.kafka每秒钟能有百万条消息的吞吐量,因此很适合实时的数据流处理.例如kafka在线日志收集系统可作为flume的实时消息sink端,再通过kafka的消费者将消息实时写入hbase数据库中. 卡夫卡以topic分类对记录进行存储,每个记录包含key-value和timestamp. 1.1卡夫卡系统的组件.角色 broker: 每个正在运

Apache Kafka系列(五) Kafka Connect及FileConnector示例

Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka系列(三) Java API使用 Apache Kafka系列(四) 多线程Consumer方案 Apache Kafka系列(五) Kafka Connect及FileConnector示例 一. Kafka Connect简介 Kafka是一个使用越来越广的消息系统,尤其是在大数据开发中(实时数据处理和分析).为何集成其他系统和解耦应用,经常使用Producer来发送消

【Apache Kafka】 Kafka简介及其基本原理

??对于大数据,我们要考虑的问题有很多,首先海量数据如何收集(如Flume),然后对于收集到的数据如何存储(典型的分布式文件系统HDFS.分布式数据库HBase.NoSQL数据库Redis),其次存储的数据不是存起来就没事了,要通过计算从中获取有用的信息,这就涉及到计算模型(典型的离线计算MapReduce.流式实时计算Storm.Spark),或者要从数据中挖掘信息,还需要相应的机器学习算法.在这些之上,还有一些各种各样的查询分析数据的工具(如Hive.Pig等).除此之外,要构建分布式应用还

第89课:SparkStreaming on Kafka之Kafka解析和安装实战

本篇博文将从以下方面组织内容: 1. Kafka解析 2. 消息组件Kafka 3. Kafka安装 实验搭建所需要的软件: kafka_2.10-0.9.0.1 Zookeeper集群已经安装好.在上一篇博文有安装步骤,不清楚的朋友可以参考下. 一:Kafka解析 1. Kafka是生产者和消费者模式中广播概念,Kafka也可以实现队列的方式. 2. Kafka不仅是一个消息中间键,还是一个存储系统,可以将流进来的数据存储一段时间.这就与传统的流式处理不一样,传统的流式处理处理完数据之后就消失

Apache Kafka安全| Kafka的需求和组成部分

1.目标 - 卡夫卡安全 今天,在这个Kafka教程中,我们将看到Apache Kafka Security 的概念  .Kafka Security教程包括我们需要安全性的原因,详细介绍加密.有了这个,我们将讨论Kafka Security可以轻松解决的问题列表.此外,我们将看到Kafka身份验证和授权.此外,我们将看看ZooKeeper身份验证.那么,让我们开始Apache Kafka Security. Apache Kafka安全| Kafka的需求和组成部分 2.什么是Apache K

kafka分区及副本在broker的分配

部分内容参考自:http://blog.csdn.net/lizhitao/article/details/41778193 下面以一个Kafka集群中4个Broker举例,创建1个topic包含4个Partition,2 Replication:数据Producer流动如图所示: (1) pic (2)当集群中新增2节点,Partition增加到6个时分布情况如下: 副本分配逻辑规则如下: 在Kafka集群中,每个Broker都有均等分配Partition的Leader机会. 上述图Broke

Kafka消息topic分区

kafka是为分布式环境设计的,因此如果日志文件,其实也可以理解成消息数据库,放在同一个地方,那么必然会带来可用性的下降,一挂全挂,如果全量拷贝到所有的机器上,那么数据又存在过多的冗余,而且由于每台机器的磁盘大小是有限的,所以即使有再多的机器,可处理的消息还是被磁盘所限制,无法超越当前磁盘大小.因此有了partition的概念. kafka对消息进行一定的计算,通过hash来进行分区.这样,就把一份log文件分成了多份.如上面的分区读写日志图,分成多份以后,在单台broker上,比如快速上手中,

kafka partition(分区)与 group

1.原理图 2.原理描述 一个topic 可以配置几个partition,produce发送的消息分发到不同的partition中,consumer接受数据的时候是按照group来接受,kafka确保每个partition只能同一个group中的同一个consumer消费,如果想要重复消费,那么需要其他的组来消费.Zookeerper中保存这每个topic下的每个partition在每个group中消费的offset 新版kafka把这个offsert保存到了一个__consumer_offse