为什么storm和kafka集成之后,在storm ui界面上看不到他的topo信息

为什么storm和kafka集成之后,在storm ui界面上看不到他的topo信息,第1张

从多个角度全面讲解Storm实时数据处理技术和最佳实践,为快速掌握并灵活应用Storm提供实用指南

从实际问题出发,系统介绍Storm的基本应用、多语言特性、完整业务系统实现和产品交付的最佳实践方法;从产品持续交付角度,分析并实践集成、测试和交付的所有步骤

《大数据技术丛书:Storm实时数据处理》涵盖搭建基于Storm的开发环境和测试实时系统的许多实用方法与实战用例,以及如何应用交付最佳实践来将系统部署至云端。

1,启动的时候报错

开始的时候没有注意到这个错误信息,应为拓扑发布后是正常使用的。只是在无意间看到日志中有error级别的错误日志。

分析:

1,感觉不是致命的错误,根据内容查看了相应端口是否可用。

2,考虑到官网中写明不支持ip6,检查机子将ip6关闭,但是还是有这样的问题。

3,考虑到启动的顺序问题,应为查看到一个并行度为4的spout中,有3个worker日志中是有错误信息的,另外一个是没有的。

4,看到 http://stackoverflow.com/questions/36612557/aws-workers-cant-communicate-due-to-netty-client-hostname-resolution/39104515#39104515 有人已经提出过这个。

2,拓扑提交后,报错

storm ui 出现的错误信息,但是消息还是可以消费,看到spout中的消费进程确实有的时间不对了,证明有过balance。

分析:

1,错误信息写的明白,是应为提交offset的时候做了rebalance过程,rebalance触发的条件,在 http://zqhxuyuan.github.io/2016/10/27/Kafka-Definitive-Guide-cn-04/ 这里写的很明确,但是好端端的为什么要rebalance。

2,考虑重要是通信超时,consumer 在通kafka中某个broker通信的时候。需要增加超时时间。

3, http://stackoverflow.com/questions/35658171/kafka-commitfailedexception-consumer-exception

提到了这样的错误。也可以参考下 http://blog.csdn.net/weitry/article/details/53009134 ,但是参数max.poll.records (1.×)需要注意版本问题。

解决方式:

由于项目需要,需要用到storm做分布式计算与数据处理,storm的原理和相关介绍就不在此赘叙了。

项目中storm下发的bolt有2层:

首先编写一个topology:

public class HomeBandToplogy {

private static final String TOPOLOGY_NAME = "HomeBandToplogy"

private static final String KAFKA_SPOUT = "kafkaSpout"

private static final String KAFKA_BOLT = "kafkaBolt"

private static final String ANYNASIS_BOLT = "AnynasisBolt"

private static final Log log = LogFactory.getLog(HomeBandToplogy.class)

}

然后编写一个kafkabolt和一个AnynasisBolt,如下:

kafkabolt:

public class KafkaBolt extends BaseRichBolt {

OutputCollector collector

Log logger

}

AnynasisBolt:

public class AnynasisBolt extends BaseRichBolt {

private OutputCollector collector

Log logger

}

工厂类:

public class BoxFactory {

}

接口类:

public interface BoxService extends Serializable {

}

抽象类:

**

@override

public Boolean executeRedis( return null)

@override

public Boolean executeHbase( return null)

}

storm程序启动以后,小批量数据运行正常。

继续加大数据测试,数据量达到几十万的时候,出现异常,异常如下:

[ERROR] connection attempt 9 to Netty-Client-node5/172.16.1.100:6700 failed: java.net.ConnectException: Connection refused: node5/172.16.1.100:6700

2018-11-16 17:46:11.533 o.a.s.u.StormBoundedExponentialBackoffRetry client-boss-1 [WARN] WILL SLEEP FOR 420ms (MAX)

同时storm程序大量ack失败。

开始以后是线程数过多,以及环境资源紧张导致此种异常。

后来经过重重排查,将接口去掉,将抽象类中的方法变为抽象方法后,程序运行正常。

为何出现这样的异常呢?

原因在于,storm在处理的时候只会处理当前进程下的任务,跨进程的调度是无法实现的,故产生这样的故障。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9414853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存