Storm新特性之Flux

Storm新特性之Flux



Flux是Storm版本号0.10.0中的新组件,主要目的是为了方便拓扑的开发与部署。原先在开发Storm拓扑的时候整个拓扑的结构都是硬编码写在代码中的,当要对其进行改动时,须要改动代码并又一次编译和打包,这是一件繁琐和痛苦的事情,Flux攻克了这一问题。

特性

以下是Flux提供的全部的特性:

  • easy配置和部署拓扑(包含Storm和Trident)
  • 支持变更已存在的拓扑
  • 通过YAML文件来定义Spouts和Bolts,甚至能够支持Storm的其它组件。如storm-kafka/storm-hdfs/storm-hbase等
  • easy支持多语言协议组件
  • 方便在不同环境中切换

使用

想要用Flux最简单的方法就是加入Maven依赖,然后打包成一个胖jar文件。

依赖配置例如以下:

<!-- include Flux and user dependencies in the shaded jar -->
<dependencies>
    <!-- Flux include -->
    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>flux-core</artifactId>
        <version>${storm.version}</version>
    </dependency>

    <!-- add user dependencies here... -->

</dependencies>
<!-- create a fat jar that includes all dependencies -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.4</version>
            <configuration>
                <createDependencyReducedPom>true</createDependencyReducedPom>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>org.apache.storm.flux.Flux</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

接下来是YAML文件的定义,一个拓扑的定义须要包含以下的部分:

  1. 拓扑名
  2. 拓扑组件的列表
  3. spouts、bolts、stream。或者是一个能够提供org.apache.storm.generated.StormTopology实例的JVM类。

以下是YAML文件实例:

name: "yaml-topology"
config:
  topology.workers: 1

# spout definitions
spouts:
  - id: "spout-1"
    className: "org.apache.storm.testing.TestWordSpout"
    parallelism: 1

# bolt definitions
bolts:
  - id: "bolt-1"
    className: "org.apache.storm.testing.TestWordCounter"
    parallelism: 1
  - id: "bolt-2"
    className: "org.apache.storm.flux.wrappers.bolts.LogInfoBolt"
    parallelism: 1

#stream definitions
streams:
  - name: "spout-1 --> bolt-1" # name isn‘t used (placeholder for logging, UI, etc.)
    from: "spout-1"
    to: "bolt-1"
    grouping:
      type: FIELDS
      args: ["word"]

  - name: "bolt-1 --> bolt2"
    from: "bolt-1"
    to: "bolt-2"
    grouping:
      type: SHUFFLE

在有了jar文件和YAML文件后就能够通过以下的命令执行Flux拓扑了。当中myTopology-0.1.0-SNAPSHOT.jar是打包后的jar文件,org.apache.storm.flux.Flux是Flux的入口类,--local表示是在本地执行拓扑,my_config.yaml使YAML配置文件。

storm jar myTopology-0.1.0-SNAPSHOT.jar org.apache.storm.flux.Flux --local my_config.yaml

其它特性具体解释

不同环境切换

在不同的环境中执行拓扑须要不一样的配置,如开发环境和生产环境,这些环境中切换一般不会改变拓扑的结构。仅仅是要改动主机、port号和并行度等。

假设用两份不一样的YAML文件来进行会产生不必要的反复,Flux能够通过.properites文件来载入不同的环境变量。

仅仅须要加入--filter參数就可以:

torm jar myTopology-0.1.0-SNAPSHOT.jar org.apache.storm.flux.Flux --local my_config.yaml --filter dev.properties

以YAML文件里的Kafka主机为例。YAML文件改动例如以下:

- id: "zkHosts"
    className: "org.apache.storm.kafka.ZkHosts"
    constructorArgs:
      - "${kafka.zookeeper.hosts}"

而dev.properties问价例如以下:

kafka.zookeeper.hosts: localhost:2181

注:YAML文件里也能够解析系统环境变量${ENV-VARIABLE}

多语言协议的支持

多语言特性的支持比較简单。仅仅须要改动YAML文件里构造參数,如以下是一个由Python写成的bolts:

bolts:
  - id: "splitsentence"
    className: "org.apache.storm.flux.bolts.GenericShellBolt"
    constructorArgs:
      # command line
      - ["python", "splitsentence.py"]
      # output fields
      - ["word"]
    parallelism: 1

 展望

Flux尽管能够加方便拓扑的改动与部署,但这仍然不支持动态的改动拓扑结构,在改动拓扑时仍要中断并重新启动。只是如今在开发中的几个特性有望改善这个情况。

參考内容: Flux github

原文地址:https://www.cnblogs.com/llguanli/p/8313075.html

时间: 2024-08-05 08:31:28

Storm新特性之Flux的相关文章

Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,视频教程

36套精品Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,P2P金融项目,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.java8新特性,P2P金融项目,程序设计,

Java高级架构,java8新特性,P2P金融项目,程序设计,功能设计,第三方支付,web安全视频教程

36套精品Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mec

解析Hadoop 2.3.0版本的新特性

2014年2月20日,Hadoop 2.3.0版本发布,这是apache 在2014年发布的第一个Hadoop版本,揭开了Hadoop 2014发展的序幕. 该版本引入了很多大家期待已久的特性,包括HDFS 的异构层次化存储架构.DataNode Cache,YARN的单点故障解决方案,以及MapReduce的自动化部署等.本文尝试为大家解析这些特性,并给出一些资料供大家深入了解. HDFS新特性. 2.3.0中引入了两个大的HDFS特性,分别是异构层次化存储架构和DataNode Cache.

java8新特性,P2P金融项目,程序设计,功能设计,架构师视频教程

36套精品Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,大型分布式电商项目实战视频教程 视频课程包含: 36套Java精品高级课架构课包含:java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,架构设计,web安全,高并发,高性能,高可用,高可扩展,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,工作流,程序调优,负载均衡,S

macOS&&IntelliJ IDEA-IntelliJ IDEA介绍以及IntelliJ IDEA 2019.3新特性

macOS&&IntelliJ IDEA-IntelliJ IDEA介绍以及IntelliJ IDEA 2019.3新特性 macOS&&IntelliJ IDEA JetBrains公司介绍 在介绍IntelliJ IDEA之前,先介绍IntelliJ IDEA这个产品的生产厂商-JetBrains 目前JetBrains官网部分内容支持中文访问,只需要在域名后面加上/zh-cn即可. 它是来自于捷克的软件开发公司,旗下有诸多的产品,涵盖了主流的语言和技术 Intelli

web新特性 之 WebSocket

详情参见:你真的了解WebSocket吗?     WebSocket系列教程   HTML5新特性之WebSocket WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex)通信.其本质是保持TCP连接,在浏览器和服务端通过Socket进行通信. 服务端与客户端的连接不断开,实现全双工的操作.及服务端或是客户端都会给对方发送消息. WebSocke

Atitit js es5 es6新特性 attilax总结

1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 基本chrome ff 360se8全面支持了2 2. ECMAScript 2015(ES6)的十大特征 – WEB前端开发 - 专注前端开发,关注用户体验.html2 1.1. JavaScript发展时间轴: 1.1995:JavaScript诞生,它的初始名叫LiveScript. 2.1997:ECMAScript标准确立. 3.1999:ES3出

CSS3的新特性 行内盒子before和after

CSS3的新特性 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>before after</title> 6 <style type="text/css"> 7 /*在DIV1盒子内部前面*/ 8 #div1:before{ 9 width: 100p

Xcode And iOS9新特性

Xcode And iOS9 1. Xcode7 新特性 > 可直接在真机上运行自己的应用,只需要有苹果账号,无需购买苹果开发者账号. > 可设置在出现 EXC_BAD_ACCESS 错误时,显示更详细的错误信息. 设置方式:XCode->Product->Scheme->Edit Scheme 左侧选择“Run” 右侧选择“Diagnostics(诊断)” 在“Runtime Sanitization(运行时净化处理)” 勾选“Enable Address Sanitize