深入解析:Storm配置项详解
深入解析:Storm配置项详解
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
在上期内容中,我们探讨了 Apache Storm 的基本架构,包括 imbus、Supervisor 和 Worker 之间的协作机制,以及 Storm 拓扑 (Topology) 的执行流程。然而,要真正发挥 Storm 的性能优势,仅仅依靠默认配置是远远不够的。为了应对不同的业务场景,开发者需要对 Storm 的配置进行优化,从而满足性能需求并保证集的稳定性。
本期内容,我们将详细解析 Storm 的核心配置项,涵盖集级别、拓扑级别以及组件级别的配置,并结合实际场景提供优化建议,帮助开发者全面掌握 Storm 配置的优化技巧。
Apache Storm 是一个分布式实时计算框架,其灵活性和高性能得益于多样化的配置项。这篇文章将系统讲解 Storm 的配置项,包括 集配置项、拓扑配置项 和 运行时配置项,并结合常见场景剖析各配置项的作用及优化策略。最终帮助开发者构建高效、稳定的实时计算系统。
Storm 的配置项分为三类:
- 集配置项:在集层面控制 imbus 和 Supervisor 等核心组件的行为。
- 拓扑配置项:为每个拓扑单独配置运行时参数。
- 运行时配置项:在代码中动态调整拓扑运行的参数。
通过合理设置这些配置项,可以实现性能优化、资源分配和容错能力的增强。
1. 集配置项
集配置项通常在 storm.yaml
文件中配置,影响整个 Storm 集的行为。
1.1 storm.zookeeper.servers
- 作用:配置 Zookeeper 集的地址,用于 imbus 和 Supervisor 的元数据管理。storm.zookeeper.servers:
- "zookeeper1"
- "zookeeper2"
- "zookeeper"
- 默认值:无(必须配置)
- 示例:
1.2 storm.zookeeper.port
- 作用:指定 Zookeeper 的端口号。storm.zookeeper.port: 2181
- 默认值:2181
- 示例:
1. nimbus.seeds
- 作用:指定 imbus 的主机名或 IP 地址。nimbus.seeds:
- "nimbus1"
- "nimbus2"
- 默认值:无(必须配置)
- 示例:
1.4 supervisor.slots.ports
- 作用:定义 Supervisor 节点可以使用的端口,用于启动 Worker 进程。supervisor.slots.ports:
- 6700
- 6701
- 6702
- 670
- 默认值:6700, 6701, 6702, 670
- 示例:
1.5 storm.local.dir
- 作用:指定 Storm 在本地存储元数据和临时文件的目录。storm.local.dir: "/var/storm"
- 默认值:无
- 示例:
1.6
- 作用:设置 Worker 进程的 JVM 参数,例如内存分配。: "-Xmx2g -Xms2g"
- 默认值:无
- 示例:
2. 拓扑配置项
拓扑配置项通常在代码中通过 Config
类设置,影响单个拓扑的行为。
2.1
- 作用:指定拓扑的名称。Config config = new Config(); config.set("", "MyTopology");
- 默认值:无(必须设置)
- 示例:
2.2 topology.workers
- 作用:定义该拓扑运行时使用的 Worker 数量。config.setumWorkers(4);
- 默认值:1
- 示例:
2. topology.
- 作用:设置 Acker 线程的数量,用于保证可靠性。
- 默认值:与 Worker 数量相同
- 优化建议:
- 高可靠性要求:增加 Acker 数量。
- 高性能要求:减少 Acker 数量。
2.4 spout.pending
- 作用:设置每个 Spout 的最大未确认消息数。config.setMaxSpoutPending(5000);
- 默认值:无限制
- 示例:
2.5 secs
- 作用:设置消息处理的超时时间,超过此时间未被确认的消息会被重新发送。config.setMessageTimeoutSecs(60);
- 默认值:0 秒
- 示例:
2.6 freq.secs
- 作用:设置拓扑组件发送 Tick Tuple 的频率,用于定时任务。config.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 10);
- 默认值:无
- 示例:
2.7 topology.fall.java.serialization
- 作用:是否回退到 Java 的默认序列化方式。config.put(Config.TOPOLOGY_FALL_BACK_O_JAVA_SERIALIZATIO, false);
- 默认值:
true
- 示例:
. 运行时配置项
运行时配置项允许在拓扑运行时动态调整参数。
.1 动态调整并发度
示例:增加 Bolt 的并发度:
代码语言:java复制StormSubmitter.submitTopology("MyTopology", config, ());
// 运行时动态调整并发度
Map<String, Object> runtimeConfig = new HashMap<>();
runtimeConfig.put("topologyponent.parallelism", 10);
StormClusterState clusterState = new ZKState();
clusterState.setTopologyConfig(topologyId, runtimeConfig);
- 合理配置 Worker 数量:
- 每个 Worker 对应一个 JVM 进程,过多的 Worker 会增加开销,过少则无法利用多核性能。
- 一般推荐 Worker 数量为机器核心数的 2- 倍。
- 设置 Acker 数量:
- 高吞吐量的拓扑可以减少 Acker 数量(甚至设置为 0,关闭可靠性)。
- 调整消息超时时间:
- 消息超时时间太短可能导致重复发送,太长可能延迟故障恢复。
- 根据实际业务场景调整,例如:
secs = 60
。
- 限制 Spout 的未确认消息:
- 防止未确认消息过多导致内存溢出。
- 推荐设置:
spout.pending = 5000
。
- 定期清理本地目录:
- 定期清理
storm.local.dir
,防止磁盘空间不足。
- 定期清理
- 监控和调优:
- 使用 Storm 自带的监控工具或第三方工具(如 Prometheus + Grafana)实时监控集性能,优化配置。
- 实时日志处理
- 使用高吞吐量 Spout(KafkaSpout)结合 Bolt 处理日志。
- 优化配置:
- 增加 Worker 数量。
- 减少 Acker 数量。
- 限制未确认消息。
- 流数据分析
- 分析实时数据流(如传感器数据)。
- 优化配置:
- 设置 Tick Tuple 实现定时任务。
- 调整 Bolt 的并发度。
- 金融交易监控
- 对实时交易数据进行风险监控。
- 优化配置:
- 增加消息超时时间。
- 使用可靠性配置(Acker)。
优点
- 灵活性高:配置项覆盖从集到任务的全生命周期。
- 高性能:通过调整并发度和资源分配,实现性能优化。
- 高可用性:配置项支持容错机制,增强系统稳定性。
缺点
- 复杂性较高:配置项较多,新手容易配置不当。
- 依赖调试和监控:需要频繁测试和监控以验证配置效果。
本文通过分类解析了 Apache Storm 的主要配置项,从集级别到拓扑级别再到运行时配置,为开发者提供了一份详细的配置参考。通过合理优化这些配置,可以显著提高 Storm 集的性能和稳定性。
Apache Storm 的灵活配置项使其成为构建实时计算系统的强大工具。开发者需要根据实际业务需求调整配置,并通过监控和调试不断优化。希望本篇文章能为您更高效地使用 Storm 提供帮助,让您的实时计算系统更加稳定和高效!
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
... ...
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
***
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:架构学习:7种负载均衡算法策略
推荐阅读
留言与评论(共有 20 条评论) |
本站网友 西安高铁 | 30分钟前 发表 |
就请评论留言告诉我叭 | |
本站网友 建东 | 15分钟前 发表 |
我们将详细解析 Storm 的核心配置项 | |
本站网友 荆门美食 | 22分钟前 发表 |
config.setMessageTimeoutSecs(60);默认值:0 秒示例:2.6 freq.secs作用:设置拓扑组件发送 Tick Tuple 的频率 | |
本站网友 武勇 | 15分钟前 发表 |
要真正发挥 Storm 的性能优势 | |
本站网友 强生美瞳日抛 | 2分钟前 发表 |
用于定时任务 | |
本站网友 symfony | 15分钟前 发表 |
希望本篇文章能为您更高效地使用 Storm 提供帮助 | |
本站网友 北关房屋出租 | 25分钟前 发表 |
仅仅依靠默认配置是远远不够的 | |
本站网友 edas | 14分钟前 发表 |
runtimeConfig);配置优化建议合理配置 Worker 数量:每个 Worker 对应一个 JVM 进程 | |
本站网友 太原星河湾小区 | 25分钟前 发表 |
过少则无法利用多核性能 | |
本站网友 顺德人民医院 | 25分钟前 发表 |
调整消息超时时间:消息超时时间太短可能导致重复发送 | |
本站网友 自贡二手房网 | 2分钟前 发表 |
通过文章的形式进行输出 | |
本站网友 上海哪家医院最好 | 30分钟前 发表 |
同时也能对自己的技术进行沉淀 | |
本站网友 黄州二手房 | 7分钟前 发表 |
欢迎点赞 | |
本站网友 房价下跌的原因 | 1分钟前 发表 |
运行时配置项:在代码中动态调整拓扑运行的参数 | |
本站网友 大脑结构 | 24分钟前 发表 |
本期内容 | |
本站网友 jieqiang | 23分钟前 发表 |
包括 imbus | |
本站网友 王建树 | 3分钟前 发表 |
查缺补漏 | |
本站网友 苹果的作用 | 29分钟前 发表 |
小伙伴们在批阅的过程中 | |
本站网友 google桌面 | 17分钟前 发表 |
并结合常见场景剖析各配置项的作用及优化策略 |