发现kafka丢消息后的排查

背景:

      最近在用kafka做消息中间件,producer从hive中读取消息发送到kafka,后端storm对消息分类发送到elasticsearch建立索引。

问题:

      hive表中总共350万数据,当时整个全量索引结束后发现,最后索引条数总共310万左右。storm日志没有任何错误日志。

排查:

      首先排查storm consumer的问题,由于发现storm日志没有任何异常,所以第一步基本排除建索引程序的问题。storm 消费kafka用的官方storm-kafka包,而且已开启ack,所以基本排除storm端的问题。

    现在怀疑kafka里的数据本身只有310万条数据,写了一个程序扔到了kafka集群上探查了一下,印证了自己的想法。果然,数据只有310万条。现在基本判断问题的在kafka producer上。仔细查看了下producer代码

props.put("acks","all");

props.put("retries",3);     

     "acks" 选项表示kafka 的ack级别:acks=0 意味着producer永远不会等待任何一个来自broker的ack,意味着不需要任何确实,发送及以为着成功。acks=1 意味着在leader replica已经接收到数据后,producer会得到一个ack,这个选项对速度与安全性做一个平衡,但是不需要等其他副本确认,如果发生leader挂了,其他副本还没来得及同步,这时就会发生数据丢失的情况。最后一种数据最安全的情况就是acks=al,l意味着在所有的ISR都接收到数据后,producer才得到一个ack。这个选项提供了最好的持久性,只要还有一个replica存活,那么数据就不会丢失,但是相应的吞吐量会受到影响。本着对业务对数据可靠性的要求,我选择了最高的可靠级别,这点没毛病。

    "retries"选项大于0的值将使客户端重新发送任何数据,一旦这些数据发送失败,会间隔一段时间重试,这个值设置的就是重试间隔时间。初步怀疑这个值太小,如果磁盘卡顿,网络中断超过三秒,是否会丢数据。所以将这个参数调大到300。

     重新打包上传到storm集群重新跑了一回,数据还是丢了30多万。场面一度尴尬。。问题陷入了僵局。

转机:

    现在的问题已经超过了我的认知,之前从来没出现过如此严重的丢数据的问题。在网上搜的资料大部分都看过。理论上可靠性可以通过副本解决,没有类似于我这个种问题。心想着如果不行,只能更改broker 从page cache同步到硬盘的频率了。鬼使神差下,我更改了下producer的压缩格式,从snappy改到gzip,这次kafka中的消息,竟然只少了2000。同样的参数,只改了下压缩格式。我又查看下了前两次用snapp格式,kafka里的消息数,发现了一个问题,两次用snappy的时候,kafka消息数竟然一模一样。如果不是玄学的问题,理论上如果丢消息,350万条,丢相同条数的信息概率简直太小了。

  现在问题似乎已经很清晰了,gzip压缩率要比snappy高,snappy优势在于压缩速度。压缩率高意味着单条数据要小。现在基本问题定位在单条数据大小的问题。但是为什么producer端没有异常日志呢。查看一下producer发送消息的源码:“Future send(ProducerRecord var1)” producer 发送消息后会发挥一个future,这种模式是异步发送方式,当broker返回异常信息时并不会抛出。,producer.send(producerRecord).get(),加上get(),将异步改同步,打包运行果然发送到30万条左右数据时就已经抛出异常

kafka.common.MessageSizeTooLargeException

解决:

  至此问题已经定位到,下一步解决问题,搜了下stackoverflow,参考下最高票回答:

Consumer side:fetch.message.max.bytes- this will determine the largest size of a message that can be fetched by the consumer.

Broker side:replica.fetch.max.bytes- this will allow for the replicas in the brokers to send messages within the cluster and make sure the messages are replicated correctly. If this is too small, then the message will never be replicated, and therefore, the consumer will never see the message because the message will never be committed (fully replicated).

Broker side:message.max.bytes- this is the largest size of the message that can be received by the broker from a producer.

Broker side (per topic):max.message.bytes- this is the largest size of the message the broker will allow to be appended to the topic. This size is validated pre-compression. (Defaults to broker'smessage.max.bytes.)

    已完美解决问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容

  • kafka数据可靠性深度解读 Kafka起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache...
    it_zzy阅读 2,007评论 2 20
  • kafka的定义:是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Act...
    时待吾阅读 5,326评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,681评论 18 139
  • 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O...
    高广超阅读 12,841评论 8 167
  • 本文转载自http://dataunion.org/?p=9307 背景介绍Kafka简介Kafka是一种分布式的...
    Bottle丶Fish阅读 5,475评论 0 34