分布式系统故障场景梳理方法:

场景梳理逻辑关系:

  • 单点硬件故障→单点进程故障类型→集群影响→集群故障场景

  • 第三方依赖故障→集群依赖关系→集群影响→集群故障场景

  • 业务场景→集群负载/错误影响→集群故障场景

Kafka故障场景

Kafka故障的定义是什么?

故障场景

  • 单点硬件故障→集群故障场景

  • 第三方依赖故障→集群故障场景

  • 业务场景→集群故障场景

Kafka压测

Kafka数据丢失:

Kafka什么情况下一定会丢失数据?

Kafka什么情况的一定不会丢失数据?

Kafka数据写入降低百毫秒级?

Kafka的Topic分片规模的设置与延迟的关系?

80%通用场景 + 20%业务特性 = 相对完善和通用的故障场景
要区分现象和原因,列举的是现象而非原因
chaosmonkey 第一版里面有一些破坏性的shell脚本可以用

节点故障
各个角色单独关闭至少一台机器,直至服务故障(线下)
各个角色同时关闭一台机器
任意一个交换机故障

单机资源:CPU、MEM、NET、DISK、IO、Ulimit
磁盘
磁盘空间写满
磁盘故障(只读)
磁盘IO饱和

节点故障,网络分区,丢包和慢速网络————目的是找出RabbitMQ集群丢失消息的方式和时间

第三方依赖:数据库、缓存、共享存储、上下游、DNS、LB、基础设施等

业务特性
集群Topic leader丢失
集群中的单个Topic分区异常的多
集群中总的分区过多
集群出现大面积的分区迁移

容量
数据写入量——单条record信息过大
消息写入量——批量消息过多

Kafka故障因子来自如下几个方面:

  • 生产者外部—每秒数据写入量(控制参数:record batch-size和throughput,thread_pool)
  • 自身内部—磁盘空间,节点数丢失,业务饱和度(分片数量,IO饱和度,内存不足?)
  • 依赖关系模块—Zookeeper问题

Kafka故障指标:

  • 功能不可用
  • 出现消息丢失——Topic没有leader
  • 消息延迟——大于100ms

以此梳理出Kafka的故障场景:

  1. 数据写入量——单条record信息过大
  2. 消息写入量——批量消息过多
  3. 集群磁盘空间被写满——单机被打满后集群会做什么事情
  4. 集群节点丢失1/5
  5. 集群节点丢失1/3
  6. 集群节点丢失1/2
  7. 集群Topic leader丢失
  8. 集群中的单个Topic分区异常的多
  9. 集群中总的分区过多
  10. 集群出现大面积的分区迁移——磁盘IO饱和
  11. 集群磁盘故障
  12. Zookeeper集群功能不可用

12-1.ZK集群节点丢失1/2

12-2.ZK集群被频繁请求

12-3.ZK集群leader选举

故障场景演练

  1. 数据写入量——单条record信息过大

考虑如下场景的比较,比较消息写入延迟率

(1)topic:test1(6,1),–record-size=838860(0.8M)–throughput 4096

(1)topic:test1(6,1),–record-size=4(KB)–throughput 4096

考虑到集群默认有消息最大请求限制(message.max.bytes=1000000,1MB以内)。

org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition.

2.消息写入量——批量消息过多

(1)topic:test1(6,1),–record-size=4(KB),–throughput 1000

(2)topic:test1(6,1),–record-size=4(0.1M),–throughput 100000000

org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition.
以及另外一种报错:
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for test2-0 due to 30001 ms has passed since last append

极端场景为:

topic:test1(6,1),–record-size=838860(0.8M),–throughput 100000000

3.

Broker 数据盘没有空间导致kafka自动关闭

[2018-10-29 16:50:16,939] FATAL [Replica Manager on Broker 0]: Halting due to unrecoverable I/O error while handling produce request: (kafka.server.ReplicaManager) kafka.common.KafkaStorageException: I/O exception in append to log 'test2-0' at kafka.log.Log.append(Log.scala:349) at kafka.cluster.Partition$$anonfun$10.apply(Partition.scala:443) at kafka.cluster.Partition$$anonfun$10.apply(Partition.scala:429) at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:234) at kafka.utils.CoreUtils$.inReadLock(CoreUtils.scala:240) at kafka.cluster.Partition.appendMessagesToLeader(Partition.scala:429) at kafka.server.ReplicaManager$$anonfun$appendToLocalLog$2.apply(ReplicaManager.scala:407) at kafka.server.ReplicaManager$$anonfun$appendToLocalLog$2.apply(ReplicaManager.scala:393) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99) at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99) at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230) at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40) at scala.collection.mutable.HashMap.foreach(HashMap.scala:99) at scala.collection.TraversableLike$class.map(TraversableLike.scala:234) at scala.collection.AbstractTraversable.map(Traversable.scala:104) at kafka.server.ReplicaManager.appendToLocalLog(ReplicaManager.scala:393) at kafka.server.ReplicaManager.appendMessages(ReplicaManager.scala:330) at kafka.server.KafkaApis.handleProducerRequest(KafkaApis.scala:436) at kafka.server.KafkaApis.handle(KafkaApis.scala:78) at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60) at java.lang.Thread.run(Thread.java:745) Caused by: java.io.IOException: No space left on device at sun.nio.ch.FileDispatcherImpl.write0(Native Method) at sun.nio.ch.FileDispatcherImpl.write(FileDispatcherImpl.java:60) at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) at sun.nio.ch.IOUtil.write(IOUtil.java:65) at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:211) at kafka.message.ByteBufferMessageSet.writeFullyTo(ByteBufferMessageSet.scala:304) at kafka.log.FileMessageSet.append(FileMessageSet.scala:354) at kafka.log.LogSegment.append(LogSegment.scala:97) at kafka.log.Log.append(Log.scala:409) ... 22 more

8.集群中的单个Topic分区异常的多

考虑如下场景的比较,比较消息写入延迟率

(1-1)topic:test1(6000,1),–record-size=838860(0.8M)–throughput 100000000

org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition.

(1-2)topic:test1(6000,1),–record-size=838860(0.8M)–throughput 1000000

(1-3)topic:test1(6000,1),–record-size=4(KB)–throughput 100000000

(1-4)topic:test1(6000,1),–record-size=4(KB)–throughput 100000000

10.集群出现大面积的分区迁移——磁盘IO饱和

11.Zookeeper集群功能不可用

Kafka压测— 搞垮kafka的方法(转)的更多相关文章

  1. kafka压测

    原文并未提及kafka的版本 并且测试的消息大小都偏小  测试数据供参考 原文还测试了broker等    原文请移步文章末尾 4.1 producer测试 4.1.1 batch-size 测试结果 ...

  2. kafka基本版与kafka acl版性能对比(单机版)

    一.场景 线上已经有kafka集群,服务运行稳定.但是因为产品升级,需要对kakfa做安全测试,也就是权限验证. 但是增加权限验证,会不会对性能有影响呢?影响大吗?不知道呀! 因此,本文就此来做一下对 ...

  3. 日新进用户200W+,解密《龙之谷》手游背后的压测故事

    2017年3月,腾讯正式于全平台上线了<龙之谷>手游,次日冲到了App Store畅销排行第二的位置,并维持到了现在.上线当日百度指数超过40万,微信游戏平台数据显示预约数780多万,而据 ...

  4. jmeter命令行压测

    简介:使用非GUI模式,即命令行模式运行jmeter测试脚本能够大大缩减系统资源 1.配置jdk及添加环境变量 变量名:JAVA_HOME 变量值: C:\Program Files\Java\jdk ...

  5. (八)使用 jmh 压测 Dubbo

    1.JMH简介 JMH即Java Microbenchmark Harness,是Java用来做基准测试的一个工具,该工具由OpenJDK提供并维护,测试结果可信度高. 相对于 Jmeter.ab , ...

  6. kafka分布式虚拟机群部署配置方法

    1 配置jdk8 假设安装(解压)路径:jdk1.8.0 修改/etc/profile,增加以下设置并保存 Export JAVA_HOME=jdk1.8.0 Export PATH=$JAVA_HO ...

  7. JMeter压测“java.net.SocketException: Socket closed”解决方法

    报错详情: java.net.SocketException: Socket closed at java.net.SocketInputStream.socketRead0(Native Metho ...

  8. JMeter压测“java.net.SocketException: Socket closed”解决方法 - Andrea-Pirlo

    报错详情: 引起 java.net.SocketException: Socket closed 错误的原因通常是 未设置连接的超时时间. 解决方法: 该问题可以尝试通过以下方法解决. 如果在 HTT ...

  9. Kafka性能调优 - Kafka优化的方法

    今天,我们将讨论Kafka Performance Tuning.在本文“Kafka性能调优”中,我们将描述在设置集群配置时需要注意的配置.此外,我们将讨论Tuning Kafka Producers ...

随机推荐

  1. Idea中,项目文件右键菜单没有svn选项处理办法

    问题描述 IntelliJ IDEA打开带SVN信息的项目,在项目文件上点击右键,菜单中没有Subversion的功能项,如下图: 解决办法 点击菜单:VCS -> Enabled Versio ...

  2. 导出服务器Oracle数据库为dmp文件

    本文链接:https://blog.csdn.net/rensheng_ruxi/article/details/79877267一.前提:本机安装有Oracle客户端,并且是正确安装. 二.导出Or ...

  3. 树莓派3 有线网卡静态IP设置

    步骤: 1.使用SSH登陆树莓派,第一连接可使用鼠标+键盘+显示器直接进入树莓派界面设置无线连接. 2.更新软件: sudo apt-get update 3.安装vim:系统自带的vi非常不好用,使 ...

  4. Joint Approximative Diagonalization of Eigen matrix (JADE)

    特征矩阵联合相似对角化算法[1]. Cardoso于1993年提出的盲信号分离具有代表性的一种算法.是一种基于四阶累积量特征矩阵近似联合对角化盲分离算法.该算法将目标函数最大化问题等价于一组四阶累积量 ...

  5. 在x64计算机上捕获32位进程的内存转储

    这是一个我经常遇到的问题,我们经常会遇到这样的情况:我们必须重新捕获内存转储,因为内存转储是以“错误”的方式捕获的.简而言之:如果在64位计算机上执行32位进程,则需要使用允许创建32位转储的工具捕获 ...

  6. 13-ESP8266 SDK开发基础入门篇--上位机串口控制 Wi-Fi输出PWM的占空比,IEEE754规约

    https://www.cnblogs.com/yangfengwu/p/11100552.html 这节做个上位机控制Wi-Fi引脚输出的PWM占空比信号,灯的亮度就可以用上位机控制了 大家可以自己 ...

  7. 洛谷 题解 P3984 【高兴的津津】

    潇洒の开始 大水题一枚/小声说话 先吐槽一下: 为什么津津经历了魔鬼训练就可以Au日常QWQ,人家也是早起晚睡的好吧 (谁说魔鬼训练就一定是早起晚睡的) 思路 津津的高兴是持续m天的,但是一旦在这m中 ...

  8. 洛谷P1076 寻宝

    寻宝 模拟加优化,细节比较重要. 我们用ti[i]表示i这一层有楼梯的个数,然后我们把当前1号点的数据mod上ti[i],然后使该数不能等于0,就行了. #include <bits/stdc+ ...

  9. 18年今日头条笔试第一题题解:球迷(fans)

    其实本题是加强版,原数据是100*100的,老师为了尊重我们的智商加成了3000*3000并进行了字符串处理…… 上原题~ 球迷 [问题描述] 一个球场C的球迷看台可容纳M*N个球迷.官方想统计一共有 ...

  10. spring boot eclipse 远程调试

    <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...