http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/_posts/2017-03-29-storm110-released.md ---------------------------------------------------------------------- diff --git a/_posts/2017-03-29-storm110-released.md b/_posts/2017-03-29-storm110-released.md new file mode 100644 index 0000000..22b7cd3 --- /dev/null +++ b/_posts/2017-03-29-storm110-released.md @@ -0,0 +1,341 @@ +--- +layout: post +title: Storm 1.1.0 released +author: P. Taylor Goetz +--- + +The Apache Storm community is pleased to announce that version 1.1.0 has been released and is available from [the downloads page](/downloads.html). + +This release represents a major milestone in the evolution of Apache Storm, and includes a large number of new features, usability and performance improvements, some of which are highlighted below. + +Streaming SQL +------------- +Storm 1.1.0 supports native Streaming SQL, powered by [Apache Calcite](http://calcite.apache.org), that allows users to run SQL queries over streaming data as well update external systems and data stores such as [Apache Hive](http://hive.apache.org). To deploy an SQL-based topology users define the SQL query in a text file and use the `storm sql` command to submit the resulting topology to a Storm cluster. Behind the scenes Storm will compile the SQL into a Trident topology and run it on the cluster. + +Storm's SQL support includes the following features: + + * Streaming from/to external sources including Apache Kafka, HDFS, MongoDB, and Redis + * Tuple filtering + * Projections + * User-defined paralallism of generated components + * User Defined Functions (UDFs) + * CSV, TSV, and Avro input/output formats + * Extensibility to additional data sources via the `ISqlTridentDataSource` interface + +For more information about Storm's SQL support including examples, refer to the following resources: + + * [Storm SQL Overview](/releases/1.1.0/storm-sql.html) + * [Storm SQL Examples](/releases/1.1.0/storm-sql-example.html) + * [Storm SQL Reference](/releases/1.1.0/storm-sql-reference.html) + +Apache Kafka Integration Improvements +------------------------------------- +In addition to the traditional support for Kafka version 0.8/0.9 based on the Kafka simple consumer, Storm includes support for Kafka 0.10 and later based on the new Kafka consumer API. Storm's integration with Kafka 0.10 and later version is highly flexible and extensible, some of the features include: + + * Enhanced configuration API + * Fine-grained offset control (at start and after failure) + * Consumer group support + * Plugable record translators + * Wildcard topics + * Multiple stream support + * Manual partition control + * Kafka security support + +For more information on Storm's Kafka integration please refer to the following documentation: + + * [Kafka Integration (0.10 and later)](/releases/1.1.0/storm-kafka-client.html) + * [Kafka Integration (0.8/0.9)](/releases/1.1.0/storm-kafka.html) + + +PMML (Predictive Model Markup Language) Support +------------ +In order to better support machine learning use cases, Storm now includes support for executing PMML models in topoliges via a generic PMML bolt. The `PMMLPredictorBolt` allows users to specify a model, the raw input, and the resulting streams and output fields. At runtime the bolt will process incoming raw data, execute the model with the given input, and output tuples with scores for predicted fields and output fields. + +More information on Storm's PMML support can be found [here](https://github.com/apache/storm/blob/v1.1.0/external/storm-pmml/README.md). + + +Druid Integration +----------------- +[Druid](http://druid.io) is a scalable, high-performance, column oriented, distributed data store popular for real time analytics use cases. Storm 1.1.0 introduces a Storm bolt and Trident state implementations for streaming data into a Druid data store. + +Documentation for Storm's Druid integration can be found [here](https://github.com/apache/storm/blob/v1.1.0/external/storm-druid/README.md). + + +OpenTSDB Integration +-------------------- +[OpenTSDB](http://opentsdb.net) is a highly scalable time series database based on Apache HBase. Storm 1.1.0 adds a Storm bolt and Trident state implementations for writing data to OpenTSDB. Storm's OpenTSDB integration gives users fine-grained control over how Storm tuples map to OpenTSDB data structure by providing a simple interface (`ITupleOpenTsdbDatapointMapper`) that performs the translation. + +Move information about Storm's OpenTSDB integration can be found [here](https://github.com/apache/storm/blob/v1.1.0/external/storm-opentsdb/README.md). + +AWS Kinesis Support +------------------- +For users looking to integrate with Amazon's Kinesis service, Storm 1.1.0 now includes a spout for consuming message streams from Kinesis. Like most of Storm's external system integration components, the Kinesis spout provides a simple interface (`RecordToTupleMapper`)for controlling how Kinesis messages are translated to Storm tuples. The Kinesis spout provides an additional interface (`FailedMessageRetryHandler`) that allows users to customize the Spout's failure handling logic. + +Documentation for the Kinesis spout can be found [here](https://github.com/apache/storm/blob/v1.1.0/external/storm-kinesis/README.md). + + +HDFS Spout +---------- +Storm's HDFS integration now includes a spout that continuously streams data from the HDFS filesystem. Storm's HDFS spout monitors a configurable directory for new files and feeds that data into a topology. When the spout has completed processing a file, it will be moved to the configured archive directory. In the event a file is corrupt or is otherwise not processable, the corresponding file will be moved to a specific directory. Parallelism of the spout is made possible through a locking mechanism that ensures each file is "owned" by a single spout instance. The HDFS spout supports connecting to HDFS instances that are secured with Kerberos authentication. + +More information on using the HDFS spout can be found in the [Storm HDFS Documentation](https://github.com/apache/storm/blob/v1.1.0/external/storm-hdfs/README.md) + + +Flux Improvements +----------------- +Flux is a framework and set of utilities that allow users to declaratively define Storm topologies and avoid hard-coding configuration values in topology components. Storm 1.1.0 introduces the following enhancements to the Flux framework: + + * Flux topology visualization in Storm UI + * Support for Stateful bolts and windowing + * Support for named streams + * Support for lists of references + +More information about Flux can be found in the [Flux documentation](/releases/1.1.0/flux.html). + + +Topology Deployment Enhancements +-------------------------------- +In previous versions of Storm it was typically necessary to include all topology dependences in a shaded "uber jar," or by making them available on Storm's classpath. In Storm 1.1.0 the `storm jar` command now includes options to upload additional dependency jars during topology submission. The `--jars` command line option allows users to specify local jar files to upload. Alternatively, the `storm jar` command offers the `--artifacts` option for specifying additional jar file dependencies by their Maven coordinates. Finally, for Maven artifacts outside the Maven Central, the `--artifactRepository` option allows users to specify additional repositories for dependency resolution. + +More informaton about available options of the `storm jar` command can be found by runnng the `storm help jar` command. + + +Resource Aware Scheduler (RAS) Improvements +------------------------------------------- +The Resource Aware Scheduler introduced in Storm 1.0 added a scheduler implementation that takes into account both the memory (on-heap and off-heap) and CPU resources available in a cluster. In Storm 1.1.0 the RAS algorithm has been overhauled to dramatically improve cluster resource utilization and introduces rack awareness into the scheduling strategy. + +More information on the new RAS capabilities can be found in the [RAS documentation](/releases/1.1.0/Resource_Aware_Scheduler_overview.html) and the [JIRA ticket](https://issues.apache.org/jira/browse/STORM-1766) introducing the new rack awareness algorithm. + + +Important Changes in the Binary Distribution +--------------------------------------------- +In order to minimize the file size of the binary distribution, external component (i.e. "connector") binaries and compiled examples are no longer included. Examples are included in source form only, but can easily compiled with the Maven `mvn install` command. + +### External Components Moved to Maven Central +Most external components are now hosted exclusively in Maven Central. External component directories will contain a README.md file, but no jar files. We encourage users to leverage a build system with Maven style dependency resolution (Maven, Gradle, etc.) to build topology jars and avoid building topology jars manually. + +Maven coordinates for these components can be determined as follows: + +Group ID: org.apache.storm +Artifact ID: [component directory name] (e.g. "storm-kafka-client", "storm-hdfs") +Version: 1.1.0 + +For users who cannot use Maven for building, external component jar files can be downloaded from Maven Central with the following URL pattern: + +``` +http://repo1.maven.org/maven2/org/apache/storm/${artifactID}/${version}/${artifactId}-${version}.jar +``` + +For example, to download the storm-kafka-client jar file the URL would be: + +``` +http://repo1.maven.org/maven2/org/apache/storm/storm-kafka-client/1.1.0/storm-kafka-client-1.1.0.jar +``` + + +Thanks +------ +Special thanks are due to all those who have contributed to Apache Storm -- whether through direct code contributions, documentation, bug reports, or helping other users on the mailing lists. Your efforts are much appreciated. + +The full changelog for this release is listed below. + +Full Changelog +-------------- + + * STORM-2425: Storm Hive Bolt not closing open transactions + * STORM-2409: Storm-Kafka-Client KafkaSpout Support for Failed and NullTuples + * STORM-2423: Join Bolt should use explicit instead of default window anchoring for emitted tuples + * STORM-2416: Improve Release Packaging to Reduce File Size + * STORM-2414: Skip checking meta's ACL when subject has write privileges for any blobs + * STORM-2038: Disable symlinks with a config option + * STORM-2240: STORM PMML Bolt - Add Support to Load Models from Blob Store + * STORM-2412: Nimbus isLeader check while waiting for max replication + * STORM-2408: build failed if storm.kafka.client.version = 0.10.2.0 + * STORM-2403: Fix KafkaBolt test failure: tick tuple should not be acked + * STORM-2361: Kafka spout - after leader change, it stops committing offsets to ZK + * STORM-2353: Replace kafka-unit by kafka_2.11 and kafka-clients to test kafka-clients:0.10.1.1 + * STORM-2387: Handle tick tuples properly for Bolts in external modules + * STORM-2345: Type mismatch in ReadClusterState's ProfileAction processing Map + * STORM-2400: Upgraded Curator to 2.12.0 and made respective API changes + * STORM-2396: setting interrupted status back before throwing a RuntimeException + * STORM-1772: Adding Perf module with topologies for measuring performance + * STORM-2395: storm.cmd supervisor calls the wrong class name + * STORM-2391: Move HdfsSpoutTopology from storm-starter to storm-hdfs-examples + * STORM-2389: Avoid instantiating Event Logger when topology.eventlogger.executors=0 + * STORM-2386: Fail-back Blob deletion also fails in BlobSynchronizer.syncBlobs. + * STORM-2388: JoinBolt breaks compilation against JDK 7 + * STORM-2374: Storm Kafka Client Test Topologies Must be Serializable + * STORM-2372: Pacemaker client doesn't clean up heartbeats properly + * STORM-2326: Upgrade log4j and slf4j + * STORM-2334: Join Bolt implementation + * STORM-1363: TridentKafkaState should handle null values from TridentTupleToKafkaMapper.getMessageFromTuple() + * STORM-2365: Support for specifying output stream in event hubs spout + * STORM-2250: Kafka spout refactoring to increase modularity and testability + * STORM-2340: fix AutoCommitMode issue in KafkaSpout + * STORM-2344: Flux YAML File Viewer for Nimbus UI + * STORM-2350: Storm-HDFS's listFilesByModificationTime is broken + * STORM-2270 Kafka spout should consume from latest when ZK partition commit offset bigger than the latest offset + * STORM-1464: storm-hdfs support for multiple output files and partitioning + * STORM-2320: DRPC client printer class reusable for local and remote DRPC + * STORM-2281: Running Multiple Kafka Spouts (Trident) Throws Illegal State Exception + * STORM-2296: Kafka spout no dup on leader changes + * STORM-2244: Some shaded jars doesn't exclude dependency signature files + * STORM-2014: New Kafka spout duplicates checking if failed messages have reached max retries + * STORM-1443: [Storm SQL] Support customizing parallelism in StormSQL + * STORM-2148: [Storm SQL] Trident mode: back to code generate and compile Trident topology + * STORM-2331: Emitting from JavaScript should work when not anchoring. + * STORM-2225: change spout config to be simpler. + * STORM-2323: Precondition for Leader Nimbus should check all topology blobs and also corresponding dependencies + * STORM-2330: Fix storm sql code generation for UDAF with non standard sql types + * STORM-2298: Don't kill Nimbus when ClusterMetricsConsumer is failed to initialize + * STORM-2301: [storm-cassandra] upgrade cassandra driver to 3.1.2 + * STORM-1446: Compile the Calcite logical plan to Storm Trident logical plan + * STORM-2303: [storm-opentsdb] Fix list invariant issue for JDK 7 + * STORM-2236: storm kafka client should support manual partition management + * STORM-2295: KafkaSpoutStreamsNamedTopics should return output fields with predictable ordering + * STORM-2300: [Flux] support list of references + * STORM-2297: [storm-opentsdb] Support Flux for OpenTSDBBolt + * STORM-2294: Send activate and deactivate command to ShellSpout + * STORM-2280: Upgrade Calcite version to 1.11.0 + * STORM-2278: Allow max number of disruptor queue flusher threads to be configurable + * STORM-2277: Add shaded jar for Druid connector + * STORM-2274: Support named output streams in Hdfs Spout + * STORM-2204: Adding caching capabilities in HBaseLookupBolt + * STORM-2267: Use user's local maven repo. directory to local repo. + * STORM-2254: Provide Socket time out for nimbus thrift client + * STORM-2200: [Storm SQL] Drop Aggregate & Join support on Trident mode + * STORM-2266: Close NimbusClient instances appropriately + * STORM-2203: Add a getAll method to KeyValueState interface + * STORM-1886: Extend KeyValueState iface with delete + * STORM-2022: update Fields test to match new behavior + * STORM-2020: Stop using sun internal classes + * STORM-1228: port fields_test to java + * STORM-2104: New Kafka spout crashes if partitions are reassigned while tuples are in-flight + * STORM-2257: Add built in support for sum function with different types. + * STORM-2082: add sql external module storm-sql-hdfs + * STORM-2256: storm-pmml breaks on java 1.7 + * STORM-2223: PMML Bolt. + * STORM-2222: Repeated NPEs thrown in nimbus if rebalance fails + * STORM-2190: reduce contention between submission and scheduling + * STORM-2239: Handle InterruptException in new Kafka spout + * STORM-2087: Storm-kafka-client: Failed tuples are not always replayed + * STORM-2238: Add Timestamp extractor for windowed bolt + * STORM-2235: Introduce new option: 'add remote repositories' for dependency resolver + * STORM-2215: validate blobs are present before submitting + * STORM-2170: [Storm SQL] Add built-in socket datasource to runtime + * STORM-2226: Fix kafka spout offset lag ui for kerberized kafka + * STORM-2224: Exposed a method to override in computing the field from given tuple in FieldSelector + * STORM-2220: Added config support for each bolt in Cassandra bolts, fixed the bolts to be used also as sinks. + * STORM-2205: Racecondition in getting nimbus summaries while ZK connectionions are reconnected + * STORM-2182: Refactor Storm Kafka Examples Into Own Modules. + * STORM-1694: Kafka Spout Trident Implementation Using New Kafka Consumer API + * STORM-2173: [SQL] Support CSV as input / output format + * STORM-2177: [SQL] Support TSV as input / output format + * STORM-2172: [SQL] Support Avro as input / output format + * STORM-2185: Storm Supervisor doesn't delete directories properly sometimes + * STORM-2103: [SQL] Introduce new sql external module: storm-sql-mongodb + * STORM-2175: fix double close of workers + * STORM-2109: Under supervisor V2 SUPERVISOR_MEMORY_CAPACITY_MB and SUPERVISOR_CPU_CAPACITY must be Doubles + * STORM-2110: in supervisor v2 filter out empty command line args + * STORM-2117: Supervisor V2 with local mode extracts resources directory to topology root directory instead of temporary directory + * STORM-2131: Add blob command to worker-launcher, make stormdist directory not writeable by topo owner + * STORM-2018: Supervisor V2 + * STORM-2139: Let ShellBolts and ShellSpouts run with scripts from blobs + * STORM-2072: Add map, flatMap with different outputs (T->V) in Trident + * STORM-2134: improving the current scheduling strategy for RAS + * STORM-2125: Use Calcite's implementation of Rex Compiler + * STORM-1546: Adding Read and Write Aggregations for Pacemaker to make it HA compatible + * STORM-1444: Support EXPLAIN statement in StormSQL + * STORM-2099: Introduce new sql external module: storm-sql-redis + * STORM-2097: Improve logging in trident core and examples + * STORM-2144: Fix Storm-sql group-by behavior in standalone mode + * STORM-2066: make error message in IsolatedPool.java more descriptive + * STORM-1870: Allow FluxShellBolt/Spout set custom "componentConfig" via yaml + * STORM-2126: fix NPE due to race condition in compute-new-sched-assign⦠+ * STORM-2124: show requested cpu mem for each component + * STORM-2089: Replace Consumer of ISqlTridentDataSource with SqlTridentConsumer + * STORM-2118: A few fixes for storm-sql standalone mode + * STORM-2105: Cluster/Supervisor total and available resources displayed in the UI + * STORM-2078: enable paging in worker datatable + * STORM-1664: Allow Java users to start a local cluster with a Nimbus Thrift server. + * STORM-1872: Release Jedis connection when topology shutdown + * STORM-2100: Fix Trident SQL join tests to not rely on ordering + * STORM-1837: Fix complete-topology and prevent message loss + * STORM-2098: DruidBeamBolt: Pass DruidConfig.Builder as constructor argument + * STORM-2092: optimize TridentKafkaState batch sending + * STORM-1979: Storm Druid Connector implementation. + * STORM-2057: Support JOIN statement in Storm SQL + * STORM-1970: external project examples refator + * STORM-2074: fix storm-kafka-monitor NPE bug + * STORM-1459: Allow not specifying producer properties in read-only Kafka table in StormSQL + * STORM-2052: Kafka Spout New Client API - Log Improvements and Parameter Tuning for Better Performance. + * STORM-2050: [storm-sql] Support User Defined Aggregate Function for Trident mode + * STORM-1434: Support the GROUP BY clause in StormSQL + * STORM-2016: Topology submission improvement: support adding local jars and maven artifacts on submission + * STORM-1994: Add table with per-topology & worker resource usage and components in (new) supervisor and topology pages + * STORM-2042: Nimbus client connections not closed properly causing connection leaks + * STORM-1766: A better algorithm server rack selection for RAS + * STORM-1913: Additions and Improvements for Trident RAS API + * STORM-2037: debug operation should be whitelisted in SimpleAclAuthorizer. + * STORM-2023: Add calcite-core to dependency of storm-sql-runtime + * STORM-2036: Fix minor bug in RAS Tests + * STORM-1979: Storm Druid Connector implementation. + * STORM-1839: Storm spout implementation for Amazon Kinesis Streams. + * STORM-1876: Option to build storm-kafka and storm-kafka-client with different kafka client version + * STORM-2000: Package storm-opentsdb as part of external dir in installation + * STORM-1989: X-Frame-Options support for Storm UI + * STORM-1962: support python 3 and 2 in multilang + * STORM-1964: Unexpected behavior when using count window together with timestamp extraction + * STORM-1890: ensure we refetch static resources after package build + * STORM-1988: Kafka Offset not showing due to bad classpath. + * STORM-1966: Expand metric having Map type as value into multiple metrics based on entries + * STORM-1737: storm-kafka-client has compilation errors with Apache Kafka 0.10 + * STORM-1968: Storm logviewer does not work for nimbus.log in secure cluster + * STORM-1910: One topology cannot use hdfs spout to read from two locations + * STORM-1960: Add CORS support to STORM UI Rest api + * STORM-1959: Add missing license header to KafkaPartitionOffsetLag + * STORM-1950: Change response json of "Topology Lag" REST API to keyed by spoutId, topic, partition. + * STORM-1833: Simple equi-join in storm-sql standalone mode + * STORM-1866: Update Resource Aware Scheduler Documentation + * STORM-1930: Kafka New Client API - Support for Topic Wildcards + * STORM-1924: Adding conf options for Persistent Word Count Topology + * STORM-1956: Disabling Backpressure by default + * STORM-1934: Fix race condition between sync-supervisor and sync-processes + * STORM-1919: Introduce FilterBolt on storm-redis + * STORM-1945: Fix NPE bugs on topology spout lag for storm-kafka-monitor + * STORM-1888: add description for shell command + * STORM-1902: add a simple & flexible FileNameFormat for storm-hdfs + * STORM-1914: Storm Kafka Field Topic Selector + * STORM-1907: PartitionedTridentSpoutExecutor has incompatible types that cause ClassCastException + * STORM-1925: Remove Nimbus thrift call from Nimbus itself + * STORM-1909: Update HDFS spout documentation + * STORM-1136: Command line module to return kafka spout offsets lag and display in storm ui + * STORM-1911: IClusterMetricsConsumer should use seconds to timestamp unit + * STORM-1893: Support OpenTSDB for storing timeseries data. + * STORM-1723: Introduce ClusterMetricsConsumer + * STORM-1700: Introduce 'whitelist' / 'blacklist' option to MetricsConsumer + * STORM-1698: Asynchronous MetricsConsumerBolt + * STORM-1705: Cap number of retries for a failed message + * STORM-1884: Prioritize pendingPrepare over pendingCommit + * STORM-1575: fix TwitterSampleSpout NPE on close + * STORM-1874: Update logger private permissions + * STORM-1865: update command line client document + * STORM-1771: HiveState should flushAndClose before closing old or idle Hive connections + * STORM-1882: Expose TextFileReader public + * STORM-1873: Implement alternative behaviour for late tuples + * STORM-1719: Introduce REST API: Topology metric stats for stream + * STORM-1887: Fixed help message for set_log_level command + * STORM-1878: Flux can now handle IStatefulBolts + * STORM-1864: StormSubmitter should throw respective exceptions and log respective errors forregistered submitter hook invocation + * STORM-1868: Modify TridentKafkaWordCount to run in distributed mode + * STORM-1859: Ack late tuples in windowed mode + * STORM-1851: Fix default nimbus impersonation authorizer config + * STORM-1848: Make KafkaMessageId and Partition serializable to support + * STORM-1862: Flux ShellSpout and ShellBolt can't emit to named streams + * Storm-1728: TransactionalTridentKafkaSpout error + * STORM-1850: State Checkpointing Documentation update + * STORM-1674: Idle KafkaSpout consumes more bandwidth than needed + * STORM-1842: Forward references in storm.thrift cause tooling issues + * STORM-1730: LocalCluster#shutdown() does not terminate all storm threads/thread pools. + * STORM-1709: Added group by support in storm sql standalone mode + * STORM-1720: Support GEO in storm-redis
http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/_posts/2017-07-28-storm104-released.md ---------------------------------------------------------------------- diff --git a/_posts/2017-07-28-storm104-released.md b/_posts/2017-07-28-storm104-released.md new file mode 100644 index 0000000..bdc0795 --- /dev/null +++ b/_posts/2017-07-28-storm104-released.md @@ -0,0 +1,48 @@ +--- +layout: post +title: Storm 1.0.4 Released +author: P. Taylor Goetz +--- + +The Apache Storm community is pleased to announce that version 1.0.4 has been released and is available from [the downloads page](/downloads.html). + +This is a maintenance release that includes a number of important bug fixes that improve Storm's performance, stability and fault tolerance. We encourage users of previous versions to upgrade to this latest release. + + +Thanks +------ +Special thanks are due to all those who have contributed to Apache Storm -- whether through direct code contributions, documentation, bug reports, or helping other users on the mailing lists. Your efforts are much appreciated. + + +Full Changelog +--------- + + * STORM-2627: Update docs for storm.zookeeper.topology.auth.scheme + * STORM-2597: Don't parse passed in class paths + * STORM-2524: Set Kafka client.id with storm-kafka + * STORM-2448: Add in Storm and JDK versions when submitting a topology + * STORM-2511: Submitting a topology with name containing unicode getting failed + * STORM-2498: Fix Download Full File link + * STORM-2486: Prevent cd from printing target directory to avoid breaking classpath + * STORM-1114: Race condition in trident zookeeper zk-node create/delete + * STORM-2429: Properly validate supervisor.scheduler.meta + * STORM-2194: Stop ignoring socket timeout error from executor + * STORM-2450: Write resources into correct local director + * STORM-2414: Skip checking meta's ACL when subject has write privileges for any blobs + * STORM-2038: Disable symlinks with a config option + * STORM-2038: No symlinks for local cluster + * STORM-2403: Fix KafkaBolt test failure: tick tuple should not be acked + * STORM-2361: Kafka spout - after leader change, it stops committing offsets to ZK + * STORM-2296: Kafka spout - no duplicates on leader changes + * STORM-2387: Handle tick tuples properly for Bolts in external modules + * STORM-2345: Type mismatch in ReadClusterState's ProfileAction processing Map + * STORM-2104: New Kafka spout crashes if partitions are reassigned while tuples are in-flight + * STORM-2396: setting interrupted status back before throwing a RuntimeException + * STORM-2395: storm.cmd supervisor calls the wrong class name + * STORM-2385: pacemaker_state_factory.clj does not compile on branch-1.0.x + * STORM-2389: Avoid instantiating Event Logger when topology.eventlogger.executors=0 + * STORM-2386: Fail-back Blob deletion also fails in BlobSynchronizer.syncBlobs + * STORM-2360: Storm-Hive: Thrift version mismatch with storm-core + * STORM-2372: Pacemaker client doesn't clean up heartbeats properly + * STORM-2326: Upgrade log4j and slf4j + * STORM-2350: Storm-HDFS's listFilesByModificationTime is broken \ No newline at end of file http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/_posts/2017-08-01-storm111-released.md ---------------------------------------------------------------------- diff --git a/_posts/2017-08-01-storm111-released.md b/_posts/2017-08-01-storm111-released.md new file mode 100644 index 0000000..c31efdd --- /dev/null +++ b/_posts/2017-08-01-storm111-released.md @@ -0,0 +1,64 @@ +--- +layout: post +title: Storm 1.1.1 Released +author: P. Taylor Goetz +--- + +The Apache Storm community is pleased to announce that version 1.1.1 has been released and is available from [the downloads page](/downloads.html). + +This is a maintenance release that includes a number of important bug fixes that improve Storm's performance, stability and fault tolerance. We encourage users of previous versions to upgrade to this latest release. + + +Thanks +------ +Special thanks are due to all those who have contributed to Apache Storm -- whether through direct code contributions, documentation, bug reports, or helping other users on the mailing lists. Your efforts are much appreciated. + + +Full Changelog +--------- + + * STORM-2659: Add daemon.name variable to storm.cmd to fix log4j logging + * STORM-2652: fix error in open method of JmsSpout + * STORM-2645: Update storm.py to be python3 compatible + * STORM-2621: add tuple_population metric + * STORM-2639: Kafka Spout incorrectly computes numCommittedOffsets due to voids in the topic (topic compaction) + * STORM-2544: Fixing issue in acking of tuples that hit retry limit under manual commit mode + * STORM-2618: Add TridentKafkaStateUpdater for storm-kafka-client + * STORM-2608: Remove any pending offsets that are no longer valid + * STORM-2503: Fix lgtm.com alerts on equality and comparison operations + * STORM-2478: Fix BlobStoreTest.testDeleteAfterFailedCreate on Windows + * STORM-2602: storm.zookeeper.topology.auth.payload doesn't work even you set it + * STORM-2597: Don't parse passed in class paths + * STORM-2564: We should provide a template for storm-cluster-auth.yaml + * STORM-2568: Fix getTopicsString + * STORM-2563: Remove the workaround to handle missing UGI.loginUserFromSubject + * STORM-2552: KafkaSpoutMessageId should be serializable + * STORM-2562: Use stronger key size than default for blow fish key generator and get rid of stack trace + * STORM-2557: A bug in DisruptorQueue causing severe underestimation of queue arrival rates + * STORM-2449: Ensure same key appears only once in State iterator + * STORM-2516: Fix timing issues with testPrepareLateTupleStreamWithoutBuilder + * STORM-2489: Overlap and data loss on WindowedBolt based on Duration + * STORM-2528: Bump log4j version to 2.8.2 + * STORM-2527: Initialize java.sql.DriverManager earlier to avoid deadlock + * STORM-2413: Make new Kafka spout respect tuple retry limits + * STORM-2518: Handles empty name for "USER type" ACL when normalizing ACLs + * STORM-2511: Submitting a topology with name containing unicode getting failed + * STORM-2496: Dependency artifacts should be uploaded to blobstore with READ permission for all + * STORM-2505: Spout to support topic compaction + * STORM-2498: Fix Download Full File link + * STORM-2343: New Kafka spout can stop emitting tuples if more than maxUncommittedOffsets tuples fail at once. + * STORM-2486: Prevent cd from printing target directory to avoid breaking classpath + * STORM-2488: The UI user Must be HTTP. + * STORM-2481: Upgrade Aether version to resolve Aether bug BUG-451566 + * STORM-2435: Logging in storm.js inconsistent to console.log and does not support log levels + * STORM-2315: New kafka spout can't commit offset when ack is disabled + * STORM-2467: Use explicit charset when decoding from array backed buffer + * STORM-1114: Race condition in trident zookeeper zk-node create/delete + * STORM-2448: Add in Storm and JDK versions when submitting a topology + * STORM-2343: Fix new Kafka spout stopping processing if more than maxUncommittedOffsets tuples fail at once + * STORM-2431: the default blobstore.dir is storm.local.dir/blobs which is different from distcache-blobstore.md + * STORM-2429: Properly validate supervisor.scheduler.meta + * STORM-2451: windows storm.cmd does not set log4j2 config file correctly by default + * STORM-2450: Write resources into correct local director + * STORM-2440: Kill process if executor catches `java.net.SocketTimeoutException` + * STORM-2432: Storm-Kafka-Client Trident Spout Seeks Incorrect Offset With UNCOMMITTED_LATEST Strategy \ No newline at end of file http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/_sass/_syntax-highlighting.scss ---------------------------------------------------------------------- diff --git a/_sass/_syntax-highlighting.scss b/_sass/_syntax-highlighting.scss new file mode 100644 index 0000000..a0d2404 --- /dev/null +++ b/_sass/_syntax-highlighting.scss @@ -0,0 +1,70 @@ +%vertical-rhythm { + margin-bottom: $spacing-unit / 2; +} +/** + * Syntax highlighting styles + */ +.highlight { + background: #fff; + @extend %vertical-rhythm; + + .c { color: #998; font-style: italic } // Comment + .err { color: #a61717; background-color: #e3d2d2 } // Error + .k { font-weight: bold } // Keyword + .o { font-weight: bold } // Operator + .cm { color: #998; font-style: italic } // Comment.Multiline + .cp { color: #999; font-weight: bold } // Comment.Preproc + .c1 { color: #998; font-style: italic } // Comment.Single + .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: #000; background-color: #fdd } // Generic.Deleted + .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific + .ge { font-style: italic } // Generic.Emph + .gr { color: #a00 } // Generic.Error + .gh { color: #999 } // Generic.Heading + .gi { color: #000; background-color: #dfd } // Generic.Inserted + .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific + .go { color: #888 } // Generic.Output + .gp { color: #555 } // Generic.Prompt + .gs { font-weight: bold } // Generic.Strong + .gu { color: #aaa } // Generic.Subheading + .gt { color: #a00 } // Generic.Traceback + .kc { font-weight: bold } // Keyword.Constant + .kd { font-weight: bold } // Keyword.Declaration + .kp { font-weight: bold } // Keyword.Pseudo + .kr { font-weight: bold } // Keyword.Reserved + .kt { color: #458; font-weight: bold } // Keyword.Type + .m { color: #099 } // Literal.Number + .s { color: #d14 } // Literal.String + .na { color: #008080 } // Name.Attribute + .nb { color: #0086B3 } // Name.Builtin + .nc { color: #458; font-weight: bold } // Name.Class + .no { color: #008080 } // Name.Constant + .ni { color: #800080 } // Name.Entity + .ne { color: #900; font-weight: bold } // Name.Exception + .nf { color: #900; font-weight: bold } // Name.Function + .nn { color: #555 } // Name.Namespace + .nt { color: #000080 } // Name.Tag + .nv { color: #008080 } // Name.Variable + .ow { font-weight: bold } // Operator.Word + .w { color: #bbb } // Text.Whitespace + .mf { color: #099 } // Literal.Number.Float + .mh { color: #099 } // Literal.Number.Hex + .mi { color: #099 } // Literal.Number.Integer + .mo { color: #099 } // Literal.Number.Oct + .sb { color: #d14 } // Literal.String.Backtick + .sc { color: #d14 } // Literal.String.Char + .sd { color: #d14 } // Literal.String.Doc + .s2 { color: #d14 } // Literal.String.Double + .se { color: #d14 } // Literal.String.Escape + .sh { color: #d14 } // Literal.String.Heredoc + .si { color: #d14 } // Literal.String.Interpol + .sx { color: #d14 } // Literal.String.Other + .sr { color: #009926 } // Literal.String.Regex + .s1 { color: #d14 } // Literal.String.Single + .ss { color: #990073 } // Literal.String.Symbol + .bp { color: #999 } // Name.Builtin.Pseudo + .vc { color: #008080 } // Name.Variable.Class + .vg { color: #008080 } // Name.Variable.Global + .vi { color: #008080 } // Name.Variable.Instance + .il { color: #099 } // Literal.Number.Integer.Long +} http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about.md ---------------------------------------------------------------------- diff --git a/about.md b/about.md new file mode 100644 index 0000000..ee0e928 --- /dev/null +++ b/about.md @@ -0,0 +1,44 @@ +--- +layout: page +title: Project Information +items: + - + - "/about/integrates.html" + - "Integrates" + - + - "/about/simple-api.html" + - "Simple API" + - + - "/about/scalable.html" + - "Scalable" + - + - "/about/fault-tolerant.html" + - "Fault tolerant" + - + - "/about/guarantees-data-processing.html" + - "Guarantees data processing" + - + - "/about/multi-language.html" + - "Use with any language" + - + - "/about/deployment.html" + - "Easy to deploy and operate" + - + - "/about/free-and-open-source.html" + - "Free and open source" +--- +{% for post in page.items %} +<div class="download-block"> + <div class="row"> + <div class="col-md-3 remove-custom-padding"> + <h4><a class="{% if page.url == post[0] then %}current{% else %}{% endif %}" href="{{ post[0] }}">{{ post[1] }}</a></h4> + </div> + <div class="col-md-9 remove-custom-padding"> + <div class="download-info"> + <h4>{{page.title}}</h4> + {{ post[1].meta }} + </div> + </div> + </div> +</div> +{% endfor %} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/deployment.md ---------------------------------------------------------------------- diff --git a/about/deployment.md b/about/deployment.md new file mode 100644 index 0000000..ff33cc5 --- /dev/null +++ b/about/deployment.md @@ -0,0 +1,10 @@ +--- +layout: about +title: Easy to deploy and operate +--- + +Storm clusters are easy to deploy, requiring a minimum of setup and configuration to get up and running. Storm's out of the box configurations are suitable for production. Read more about how to deploy a Storm cluster [here](/documentation/Setting-up-a-Storm-cluster.html). + +If you're on EC2, the [storm-deploy](https://github.com/nathanmarz/storm-deploy) project can provision, configure, and install a Storm cluster from scratch at just the click of a button. + +Additionally, Storm is easy to operate once deployed. Storm has been designed to be [extremely robust](/about/fault-tolerant.html) â the cluster will just keep on running, month after month. http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/drpc.md ---------------------------------------------------------------------- diff --git a/about/drpc.md b/about/drpc.md new file mode 100644 index 0000000..762fb82 --- /dev/null +++ b/about/drpc.md @@ -0,0 +1,4 @@ +--- +--- +<meta http-equiv="refresh" content="0; url=http://storm.apache.org/index.html"> +<link rel="canonical" href="http://storm.apache.org/index.html" /> http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/fault-tolerant.md ---------------------------------------------------------------------- diff --git a/about/fault-tolerant.md b/about/fault-tolerant.md new file mode 100644 index 0000000..057b372 --- /dev/null +++ b/about/fault-tolerant.md @@ -0,0 +1,9 @@ +--- +layout: about +--- + +Storm is fault-tolerant: when workers die, Storm will automatically restart them. If a node dies, the worker will be restarted on another node. + +The Storm daemons, Nimbus and the Supervisors, are designed to be stateless and fail-fast. So if they die, they will restart like nothing happened. This means you can *kill -9* the Storm daemons without affecting the health of the cluster or your topologies. + +Read more about Storm's fault-tolerance [on the manual](/documentation/Fault-tolerance.html). \ No newline at end of file http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/free-and-open-source.md ---------------------------------------------------------------------- diff --git a/about/free-and-open-source.md b/about/free-and-open-source.md new file mode 100644 index 0000000..ade6afa --- /dev/null +++ b/about/free-and-open-source.md @@ -0,0 +1,15 @@ +--- +layout: about +--- + +Apache Storm is a free and open source project licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) + + +Storm has a large and growing ecosystem of libraries and tools to use in conjunction with Storm including everything from: + +1. *Spouts*: These spouts integrate with queueing systems such as JMS, Kafka, Redis pub/sub, and more. +2. *storm-state*: storm-state makes it easy to manage large amounts of in-memory state in your computations in a reliable by using a distributed filesystem for persistence +3. *Database integrations*: There are helper bolts for integrating with various databases, such as MongoDB, RDBMS's, Cassandra, and more. +4. Other miscellaneous utilities + +The [Storm documentation](/documentation.html) has links to notable Storm-related projects hosted outside of Apache. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/guarantees-data-processing.md ---------------------------------------------------------------------- diff --git a/about/guarantees-data-processing.md b/about/guarantees-data-processing.md new file mode 100644 index 0000000..3d6a0f3 --- /dev/null +++ b/about/guarantees-data-processing.md @@ -0,0 +1,10 @@ +--- +layout: about +--- + +Storm guarantees every tuple will be fully processed. One of Storm's core mechanisms is the ability to track the lineage of a tuple as it makes its way through the topology in an extremely efficient way. Read more about how this works [here](/documentation/Guaranteeing-message-processing.html). + +Storm's basic abstractions provide an at-least-once processing guarantee, the same guarantee you get when using a queueing system. Messages are only replayed when there are failures. + +Using [Trident](/documentation/Trident-tutorial.html), a higher level abstraction over Storm's basic abstractions, you can achieve exactly-once processing semantics. + http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/integrates.md ---------------------------------------------------------------------- diff --git a/about/integrates.md b/about/integrates.md new file mode 100644 index 0000000..8071bdb --- /dev/null +++ b/about/integrates.md @@ -0,0 +1,13 @@ +--- +layout: about +--- + +Storm integrates with any queueing system and any database system. Storm's [spout](/apidocs/backtype/storm/spout/ISpout.html) abstraction makes it easy to integrate a new queuing system. Example queue integrations include: + +1. [Kestrel](https://github.com/nathanmarz/storm-kestrel) +2. [RabbitMQ / AMQP](https://github.com/Xorlev/storm-amqp-spout) +3. [Kafka](https://github.com/apache/storm/tree/master/external/storm-kafka) +4. [JMS](https://github.com/ptgoetz/storm-jms) +5. [Amazon Kinesis](https://github.com/awslabs/kinesis-storm-spout) + +Likewise, integrating Storm with database systems is easy. Simply open a connection to your database and read/write like you normally would. Storm will handle the parallelization, partitioning, and retrying on failures when necessary. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/multi-language.md ---------------------------------------------------------------------- diff --git a/about/multi-language.md b/about/multi-language.md new file mode 100644 index 0000000..836bf03 --- /dev/null +++ b/about/multi-language.md @@ -0,0 +1,9 @@ +--- +layout: about +--- + +Storm was designed from the ground up to be usable with any programming language. At the core of Storm is a [Thrift](http://thrift.apache.org/) [definition](https://github.com/apache/storm/blob/master/storm-core/src/storm.thrift) for defining and submitting topologies. Since Thrift can be used in any language, topologies can be defined and submitted from any language. + +Similarly, spouts and bolts can be defined in any language. Non-JVM spouts and bolts communicate to Storm over a [JSON-based protocol](/documentation/Multilang-protocol.html) over stdin/stdout. Adapters that implement this protocol exist for [Ruby](https://github.com/apache/storm/blob/master/storm-multilang/ruby/src/main/resources/resources/storm.rb), [Python](https://github.com/apache/storm/blob/master/storm-multilang/python/src/main/resources/resources/storm.py), [Javascript](https://github.com/apache/storm/blob/master/storm-multilang/javascript/src/main/resources/resources/storm.js), [Perl](https://github.com/dan-blanchard/io-storm). + +*storm-starter* has an [example topology](https://github.com/apache/storm/blob/master/examples/storm-starter/src/jvm/storm/starter/WordCountTopology.java) that implements one of the bolts in Python. http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/scalable.md ---------------------------------------------------------------------- diff --git a/about/scalable.md b/about/scalable.md new file mode 100644 index 0000000..b487e52 --- /dev/null +++ b/about/scalable.md @@ -0,0 +1,10 @@ +--- +layout: about +--- + +Storm topologies are inherently parallel and run across a cluster of machines. Different parts of the topology can be scaled individually by tweaking their parallelism. The "rebalance" command of the "storm" command line client can adjust the parallelism of running topologies on the fly. + +Storm's inherent parallelism means it can process very high throughputs of messages with very low latency. Storm was benchmarked at processing **one million 100 byte messages per second per node** on hardware with the following specs: + + * **Processor:** 2x Intel E5645@2.4Ghz + * **Memory:** 24 GB http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/about/simple-api.md ---------------------------------------------------------------------- diff --git a/about/simple-api.md b/about/simple-api.md new file mode 100644 index 0000000..906d145 --- /dev/null +++ b/about/simple-api.md @@ -0,0 +1,15 @@ +--- +layout: about +--- + +Storm has a simple and easy to use API. When programming on Storm, you manipulate and transform streams of tuples, and a tuple is a named list of values. Tuples can contain objects of any type; if you want to use a type Storm doesn't know about it's [very easy](/releases/current/Serialization.html) to register a serializer for that type. + +There are just three abstractions in Storm: spouts, bolts, and topologies. A **spout** is a source of streams in a computation. Typically a spout reads from a queueing broker such as Kestrel, RabbitMQ, or Kafka, but a spout can also generate its own stream or read from somewhere like the Twitter streaming API. Spout implementations already exist for most queueing systems. + +A **bolt** processes any number of input streams and produces any number of new output streams. Most of the logic of a computation goes into bolts, such as functions, filters, streaming joins, streaming aggregations, talking to databases, and so on. + +A **topology** is a network of spouts and bolts, with each edge in the network representing a bolt subscribing to the output stream of some other spout or bolt. A topology is an arbitrarily complex multi-stage stream computation. Topologies run indefinitely when deployed. + +Storm has a "local mode" where a Storm cluster is simulated in-process. This is useful for development and testing. The "storm" command line client is used when ready to submit a topology for execution on an actual cluster. + +The [storm-starter](https://github.com/apache/storm/tree/master/examples/storm-starter) project contains example topologies for learning the basics of Storm. Learn more about how to use Storm by reading the [tutorial](/releases/current/Tutorial.html) and the [documentation](/releases/current/index.html). http://git-wip-us.apache.org/repos/asf/storm-site/blob/d070189e/assets/css/bootstrap-theme.css ---------------------------------------------------------------------- diff --git a/assets/css/bootstrap-theme.css b/assets/css/bootstrap-theme.css new file mode 100644 index 0000000..c4cadf1 --- /dev/null +++ b/assets/css/bootstrap-theme.css @@ -0,0 +1,470 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default:disabled, +.btn-default[disabled] { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary:disabled, +.btn-primary[disabled] { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success:disabled, +.btn-success[disabled] { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info:disabled, +.btn-info[disabled] { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning:disabled, +.btn-warning[disabled] { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger:disabled, +.btn-danger[disabled] { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */