一、为何需要replication

kafka0.8以前的版本中,是没有Replication的,一旦某一个Broker宕机,则其上所有的partition数据都不可被消费,这与kafka数据持久性及Delivery担保设计目标相悖,同时producer都不能再将数据保存于这些partition中。

1.1 如果producer使用同步模式则producer会再尝试重新发送message.send.max.retries(默认值是3)次后会抛出Exception,用户可以选择停止发送后续数据也可选择继续发送。而前者会造成数据阻塞,后者会造成本应发往该broker的数据丢失。

1.2如果producer使用异步模式则producer会尝试重新发送message.send.max.retries(默认值是3)次后记录该异常并继续发送后续数据,这会造成数据丢失并且用户只能通过日志发现该问题,同时,kafka的producer并未对异常模式提供callback接口。

由此可见,在没有replication的情况下,一旦某机器宕机或者某个broker停止工作则会造成整个系统的可用性降低,随着集群规模的增加,整个集群中出现该类异常的几率大大增加,因为对于生产系统而言replication机制引入非常重要。

二、为何需要leader Election

leader 选举主要是指replition之间的leader选举

引入replication之后,同一个partition可能会有多个replica,而这时需要再这些replicationn直接选举一个leader,producer和consumer只与这个leader交互,其他replica作为followe从leader中复制数据。

因为需要保证同一个partition的多个replica之间的数据一致性(其中一个宕机后其他replica必须要能继续服务并且即不能造成数据丢失)如果没有一个leader,所有的replication都可同时读/写数据,那就需要保证多个replica之间互相(N*N条通道)同步数据,数据的一致性和有序性非常难保证,大大增加了replication实现的复杂性,同时也增加了出现异常的几率,而引入leader后,只有leader负责数据读写,followe只向leader顺序fetch数据(N条通道),系统更加简单且高效。

kafka为何需要High Available的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  3. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  4. .net windows Kafka 安装与使用入门(入门笔记)

    完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...

  5. kafka配置与使用实例

    kafka作为消息队列,在与netty.多线程配合使用时,可以达到高效的消息队列

  6. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

  7. Kafka副本管理—— 为何去掉replica.lag.max.messages参数

    今天查看Kafka 0.10.0的官方文档,发现了这样一句话:Configuration parameter replica.lag.max.messages was removed. Partiti ...

  8. Kafka:主要参数详解(转)

    原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...

  9. kafka

    2016-11-13  20:48:43 简单说明什么是kafka? Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息 ...

  10. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

随机推荐

  1. 【洛谷P1226 【模板】快速幂||取余运算】

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 作为初 ...

  2. arm-fsl-linux-gnueabi交叉编译器安装

    系统:Ubuntu 14.04 64bit 编译器gcc version 4.4.4 (4.4.4_09.06.2010) 解压编译器到相应路径(注:当我解压放到/home/cross_compile ...

  3. 一个小误区 JS中的contains

    在Java语言中,contains可以用于判断str1是否包含str2 原生JS中是有contains方法的 但它并不是字符串方法,,仅用于判断DOM元素的包含关系,参数是Element类型 若要在J ...

  4. (map string)Crazy Search hdu1381

    Crazy Search Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. C语言#和##操作符使用方法

    1.#操作符              1:#操作符用于预处理阶段,将宏参数转换为字符串,只有宏定义中使用(#define) 使用方法: #define  STRING(x)   #x printf( ...

  6. 使用CMD 命令创建指定大小的文件

    在做资源更新的时候要做 磁盘空间不足的测试,于是想创建一个文件塞满硬盘,搜索到可以用命令来创建. fsutil file createnew null.zip 524288000

  7. MyBatis-Plugins 的创建流程与执行顺序

    一.插件的解析,所有插件都会被添加到 InterceptorChain 类中,用于后续处理 org.apache.ibatis.builder.xml.XMLConfigBuilder private ...

  8. rocketmq在linux搭建双master遇到的坑

    我的环境 两台阿里云centos7服务器 首先,去官网下载解压包,解压. 然后进入bin目录,需要修改runserver.sh文件和runbroker.sh文件.因为rocketmq默认配置文件需要的 ...

  9. Linux记录-监控系统开发

    需求:使用shell定制各种个性化告警工具,但需要统一化管理.规范化管理.思路:指定一个脚本包,包含主程序.子程序.配置文件.邮件引擎.输出日志等.主程序:作为整个脚本的入口,是整个系统的命脉.配置文 ...

  10. JWT认证

    1.什么是JWT Token JWT(Json Web Tokens) 是一个开放标准(RFC 7519),它定义了一种简洁,自包含,JSON 对象形式的安全传递信息的方法.JWT常用在 Web 应用 ...