storm学习新手遇到问题--ack确认

今天是2017年的第48周 今天是2017年的第331天

问题描述:

strom系统重启之后依然从kafka历史数据读取记录

问题分类: KafkaSpout重复消费问题

解决步骤:

1 检查代码没有发现问题

Strom从Kafka中读取数据

涉及代码:

public class SpoutConfig extends KafkaConfig implements Serializable

public class KafkaSpout extends BaseRichSpout

How KafkaSpout stores offsets of a Kafka topic and recovers in case of failures

As shown in the above KafkaConfig properties, you can control from where in the Kafka topic the spout begins to read by setting KafkaConfig.startOffsetTime as follows:

1. kafka.api.OffsetRequest.EarliestTime(): read from the beginning of the topic (i.e. from the oldest messages onwards)

2. kafka.api.OffsetRequest.LatestTime(): read from the end of the topic (i.e. any new messsages that are being written to the topic)

3. A Unix timestamp aka seconds since the epoch (e.g. via System.currentTimeMillis()): see How do I accurately get offsets of messages for a certain timestamp using OffsetRequest? in the Kafka FAQ

用法:

// 偏移量越界处理

spoutConf.ignoreZkOffsets = false; // false

spoutConf.useStartOffsetTimeIfOffsetOutOfRange = true;

spoutConf.startOffsetTime = kafka.api.OffsetRequest.LatestTime();

2

反复观察 offset 半个小时内没有被修改

最终判断是tuple树跟踪影响了ack性能

代码调整如下:

conf.setNumAckers(0);//tuple树不会被跟踪

strom流程知识回顾:

具体流程图如下:

ACK 解决分布式数据数据保证不会被重复处理或者遗漏处理

缺点:ack 存储这些数据用的LinkedList 顺序遍历还是消耗性能的

ack异步确认方式

这次写的比较混乱 后续计划

参考

  1. https://github.com/apache/storm/tree/master/external/storm-kafka
  2. http://blog.jassassin.com/2014/10/22/storm/storm-ack/#如果有多个spout-task的时候-storm在最终ack-spout-tuple的时候-如何知道对应于哪个spout-task-因为必须在产生tuple的那个spout-task进行ack
  3. http://storm.apache.org/releases/1.1.1/Guaranteeing-message-processing.html
  4. http://www.cnblogs.com/intsmaze/p/5918087.html
  5. http://blog.csdn.net/sheen1991/article/details/52788547
  6. https://www.confluent.io/blog/data-reprocessing-with-kafka-streams-resetting-a-streams-application/
  7. http://jstorm.io/ProgrammingGuide_cn/AdvancedUsage/Theory/Acker.html
  8. http://blog.csdn.net/weiyongle1996/article/details/77206684
  9. http://storm.apache.org/releases/current/FAQ.html
  10. https://zhuanlan.zhihu.com/p/23863915 高性能队列——Disruptor

原文发布于微信公众号 - 架构说(JiaGouS)

原文发表时间:2017-11-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习实践二三事

Ipynb文件的打开

RT,ipynb文件用gedit直接打开的话,太多附加信息,此时需要在浏览器端打开 升级ipython 太低版本的ipython是不行的,出现的错误可能是这样的...

27280
来自专栏企鹅号快讯

Redis

Redis介绍: (Redis)是一个基于 key-value 键值对的持久化数据库存储系统。支持多种数据结构,包括 string (字符串)、list (链表...

47570
来自专栏北京马哥教育

自动化发布-GitLab WEB Hooks 配置

钩子(hooks) Git是在特定事件发生之前或之后执行特定脚本代码功能(从概念上类比,就与监听事件、触发器之类的东西类似)。 Git Hooks就是那些在Gi...

46250
来自专栏向治洪

Rest api简介

理解和使用内容协商 我们的开发者在发送一个 REST API 请求的同时,根据应用场景,针对相同的资源,可能会期待不同的返回形式。 比如,我希望根据用户客户端语...

28960
来自专栏我和PYTHON有个约会

爬虫 0030~ requests利刃出鞘

requests第三方封装的模块,通过简化请求和响应数据的处理,简化繁琐的开发步骤和处理逻辑、统一不同请求的编码风格以及高效的数据处理特性等而风靡于爬虫市场。

10010
来自专栏黑白安全

PHP安全编码规范之安全配置篇

因为配置不当引发的安全问题是屡见不鲜的,通过一系列的安全配置,可以很好的解决一些安全隐患,从而为系统增加安全系数。但是在开发过程中,因为需求的改变和编程的习惯可...

33820
来自专栏coding for love

进程与线程,单核与多核1. 简介2. 程序3. 进程4. 线程5. 多进程与多线程的选择6. 小结参考

用户打开浏览器,其实就是打开了浏览器应用程序。那么什么是程序呢?我们常说浏览器是多线程的,JS 是单线程的,那么什么是线程呢?说到线程,和我们常说的进程有什么关...

47730
来自专栏python学习指南

python爬虫(四)_urllib2库的基本使用

本篇我们将开始学习如何进行网页抓取,更多内容请参考:python学习指南 urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络...

216100
来自专栏JMCui

Linux 学习记录 二 (文件的打包压缩).

 前言:本文参考《鸟哥的Linux 私房菜》,如有说的不对的地方,还请指正!谢谢!  环境:Centos 6.4  和window不同,在Linux压缩文件需要...

38250
来自专栏WindCoder

《Linux内核分析》之触发一个系统调用实验总结

系统调用列表中可用的很多,可惜对用代码进行系统调用不太清楚,只好从网上窃取了一份,地址在最后放上。此处以fork()为例。

12230

扫码关注云+社区

领取腾讯云代金券