Skip navigation links

Apache Edgent (incubating) v1.2.0 API

Apache Edgent is an SDK for developing and executing streaming analytics at the edge.

See: Description

Edgent Providers 
Package Description
org.apache.edgent.providers.development
Execution of a streaming topology in a development environment .
org.apache.edgent.providers.direct
Direct execution of a streaming topology.
org.apache.edgent.providers.iot
Iot provider that allows multiple applications to share an IotDevice.
Edgent API 
Package Description
org.apache.edgent.execution
Execution of Edgent topologies and graphs.
org.apache.edgent.execution.mbeans
Management MBeans for execution.
org.apache.edgent.execution.services
Execution services.
org.apache.edgent.function
Functional interfaces for lambda expressions.
org.apache.edgent.topology
Functional api to build a streaming topology.
org.apache.edgent.topology.json
Utilities for use of JSON in a streaming topology.
org.apache.edgent.topology.mbeans
Controls for executing topologies.
org.apache.edgent.topology.plumbing
Plumbing for a streaming topology.
org.apache.edgent.topology.services
Services for topologies.
Edgent Analytics 
Package Description
org.apache.edgent.analytics.math3
Analytics using Apache Commons Math.
org.apache.edgent.analytics.math3.json
JSON analytics using Apache Commons Math.
org.apache.edgent.analytics.math3.stat
Statistical algorithms using Apache Commons Math.
org.apache.edgent.analytics.sensors
Analytics focused on handling sensor data.
Edgent Connectors 
Package Description
org.apache.edgent.connectors.command
Command / OS Process connector.
org.apache.edgent.connectors.csv
Utilities for handling Comma Separated Value strings.
org.apache.edgent.connectors.file
File stream connector.
org.apache.edgent.connectors.http
HTTP stream connector.
org.apache.edgent.connectors.iot
Edgent IoT device and IoT Gateway device connector API to an IoT message hub.
org.apache.edgent.connectors.iotp
IBM Watson IoT Platform stream connector.
org.apache.edgent.connectors.jdbc
JDBC based database stream connector.
org.apache.edgent.connectors.kafka
Apache Kafka enterprise messaging hub stream connector.
org.apache.edgent.connectors.mqtt
MQTT (lightweight messaging protocol for small sensors and mobile devices) stream connector.
org.apache.edgent.connectors.mqtt.iot
An MQTT based IotDevice connector.
org.apache.edgent.connectors.pubsub
Publish subscribe model between jobs.
org.apache.edgent.connectors.pubsub.oplets
Oplets supporting publish subscribe service.
org.apache.edgent.connectors.pubsub.service
Publish subscribe service.
org.apache.edgent.connectors.serial
Serial port connector API.
org.apache.edgent.connectors.wsclient
A generic WebSocket Client Connector API for sending and receiving messages to a WebSocket Server.
org.apache.edgent.connectors.wsclient.javax.websocket
A JSR356 based WebSocket Client Connector for sending and receiving messages to a WebSocket Server.
Edgent Utilities 
Package Description
org.apache.edgent.metrics
Metric utility methods, oplets, and reporters which allow an application to expose metric values, for example via JMX.
org.apache.edgent.metrics.oplets  
org.apache.edgent.streamscope
Stream Oscilloscope - package for instrumenting streams to capture tuples.
org.apache.edgent.streamscope.mbeans
Stream Oscilloscope ControlService Management Bean interfaces.
org.apache.edgent.streamscope.oplets
Stream Oscilloscope underlying implementation oplets.
Edgent Tester 
Package Description
org.apache.edgent.topology.tester
Testing for a streaming topology.
Edgent Low-Level API 
Package Description
org.apache.edgent.graph
Low-level graph building API.
org.apache.edgent.graph.spi  
org.apache.edgent.graph.spi.execution  
org.apache.edgent.oplet
Oplets API.
org.apache.edgent.oplet.core
Core primitive oplets.
org.apache.edgent.oplet.functional
Oplets that process tuples using functions.
org.apache.edgent.oplet.plumbing
Oplets that control the flow of tuples.
org.apache.edgent.oplet.window
Oplets using windows.
org.apache.edgent.window
Window API.
Edgent SPI 
Package Description
org.apache.edgent.topology.spi  
org.apache.edgent.topology.spi.functions  
org.apache.edgent.topology.spi.graph  
org.apache.edgent.topology.spi.tester  
Other Packages 
Package Description
org.apache.edgent.apps.iot
Applications for use in an Internet of Things environment.
org.apache.edgent.apps.runtime
Applications which provide monitoring and failure recovery to other Edgent applications.
org.apache.edgent.runtime.appservice  
org.apache.edgent.runtime.etiao
A runtime for executing an Edgent streaming topology, designed as an embeddable library so that it can be executed in a simple Java application.
org.apache.edgent.runtime.etiao.graph  
org.apache.edgent.runtime.etiao.graph.model  
org.apache.edgent.runtime.etiao.mbeans  
org.apache.edgent.runtime.jmxcontrol  
org.apache.edgent.runtime.jobregistry  
org.apache.edgent.runtime.jsoncontrol
Control service that takes a Json message and invokes an operation on a control service MBean.
Apache Edgent is an SDK for developing and executing streaming analytics at the edge.

Apache Edgent is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.

Edgent

  1. Overview
  2. Programming Model
  3. Getting Started

Overview

Apache Edgent is an SDK for developing and executing streaming analytics at the edge. Edgent provides a stream processing style programming model for composing stream processing graphs and a micro-services style runtime for executing the graphs. Some analytics and a rich collection of connectors are provided. Users can easily develop and use their own analytics and connectors. A framework for testing processing graphs is also included.

Edgent is focusing on two edge cases:

In both cases Edgent applications analyze live data and send results of that analytics and/or data intermittently to back-end systems for deeper analysis. An Edgent application can use analytics to decide when to send information to back-end systems, such as when the behaviour of the system is outside normal parameters (e.g. an engine running too hot).
Edgent applications do not send data continually to back-end systems as the cost of communication may be high (e.g. cellular networks) or bandwidth may be limited.

Edgent applications communicate with back-end systems through some form of message hub as there may be millions of edge devices. Edgent supports these message hubs:

Back-end analytic systems are used to perform analysis on information from Edgent applications that cannot be performed at the edge. Such analysis may be:


Back-end systems can interact or control devices based upon their analytics, by sending commands to specific devices, e.g. reduce maximum engine revs to reduce chance of failure before the next scheduled service, or send an alert of an accident ahead.

Programming Model

Edgent applications are streaming applications in which each tuple (data item or event) in a stream of data is processed as it occurs. Additionally, you can process windows (logical subsets) of data. For example, you could analyze the last 90 seconds of data from a sensor to identify trends in the data

Topology functional API

Overview

The primary api is Topology which uses a functional model to build a topology of streams for an application.
TStream is a declaration of a stream of tuples, an application will create streams that source data (e.g. sensor readings) and then apply functions that transform those streams into derived streams, for example simply filtering a stream containg engine temperator readings to a derived stream that only contains readings thar are greater than 100°C.
An application terminates processing for a stream by sinking it. Sinking effectively terminates a stream by applying processing to each tuple on the stream (as it occurs) that does not produce a result. Typically this sinking is transmitting the tuple to an external system, for example the messgae hub to send the data to a back-end system, or locally sending the data to a user interface.

This programming style is typical for streaming systems and similar APIs are supported by systems such as Apache Flink, Apache Spark Streaming, IBM Streams and Java 8 streams.

Functions

Edgent supports Java 8 and it is encouraged to use Java 8 as functions can be easily and clearly written using lambda expressions.

Arbitrary Topology

Simple applications may just be a pipeline of streams, for example, logically:
source --> filter --> transform --> aggregate --> send to MQTT
However Edgent allows arbitrary topologies including:

Graph API

Overview

The graph API is a lower-level API that the topology api is built on top of. A graph consists of oplet invocations connected by streams. The oplet invocations contain the processing applied to each tuple on streams connected to their input ports. Processing by the oplet submits tuples to its output ports for subsequent processing by downstream connected oplet invocations.

Getting Started

A number of sample Java applications are provided that demonstrate use of Edgent. General information about Edgent Application development and some development utilities are included. See Getting Started.

Skip navigation links

Copyright © 2016–2017 The Apache Software Foundation. All rights reserved.