As event-driven architectures continue to proliferate in the business landscape, a company’s agility and ability to drive big wins are becoming increasingly burdened by indecipherable data and unrecognized signals. That’s where CEP (complex event processing) comes in. CEP solutions continuously troll your real-time data streams in search of defined event patterns, then fire off alerts to your enterprise systems to automate a follow-on process or corrective action.
Among the offerings in this budding field is Coral8 Engine 4.6, the latest release from the company of the same name. The application comprises the Coral8 Server — a stream-processing and correlation engine based on Coral8’s own CCL (Continuous Computation Language) — and an updated Coral8 Studio, an IDE for building and debugging in CCL that doubles as a monitoring UI for the runtime engine.
The new release focuses on improving developer usability with updates to the Studio IDE, such as dockable palette windows and improved project metadata. In addition, new language constructs and engine enhancements are geared toward improving pattern-matching and reliability.
On the downside, Coral8 offers none of the graphical development features found in competitors such as StreamBase. For an application that is otherwise extremely usable, this is a conspicuous oversight.
Compared to the well-provisioned dashboards and wizards in products such as Progress Apama, Coral8 also comes up short. Coral8 is now previewing an Adobe Flex-based approach to dashboard delivery, which is encouraging.
Further, Coral8’s simulation tools would benefit from the ability to create parameters of random data feeds, although playback of canned CSV (comma-separated value) streams is available. Administration and monitoring features also could stand improvement. Moreover, you won’t find any industry-specific functions in this box. This is a generic engine, so be prepared to build your own C/C++ filters for any in-process plug-ins.
On the plus side, this CEP solution is more affordable than many of its competitors, it includes basic fail-over and clustering features, it sports a well-documented SDK, and it provides good SOAP hooks into the engine. You could clean up by starting with Coral8 as your foundation and building out the feature set to address your specific needs.
In all, Coral8 Engine is perhaps the easiest CEP application that I have used for getting started. There should be little lag time for most developers to become productive.
Easing into CEP
Getting started with Coral8 Engine installation requires little effort, thanks to its well-designed setup routine. The IDE gets you going with a solid set of tutorials and examples that ease the learning curve. The well-documented help facilities are also a plus, although they would benefit from more technical depth.
Development projects in Coral8 center on defining the schema of your incoming data streams and constructing CCL queries of that data in the built-in text editor. About the only niceties of the editor are its color-coding of language keywords and a type-ahead facility. I’d prefer a tool that is a little more intuitive, and that provides better design-time validation against my schema constructs.
Coral8 provides input adapters for binary and XML feeds, Java Message Service (pub/sub topics only), databases (via JDBC and ODBC), Tibco Rendezvous, RSS, and more. The company recently added an adapter for tapping IBM WebSphere MQ. In all, the included adapters are adequate, and several third-party adapters are available.
As I created my project, Coral8 Studio created a matching graphical flow diagram on-screen. The resulting map revealed the logical process routing and allowed me to directly drill down into subprocesses, a nice touch. Selecting an element in the diagram revealed its underlying CCL code for easy review and direct modification. During simulation testing, the diagram came alive with basic I/O metrics.
Debugging was light in the absence of breakpoints or watch lists, but I was able to view, sort, and step through streams. Accelerated playback is a good feature. And though I could not save a stream history to a file directly, I could copy and paste stream data from the stream viewer window.
The built-in monitors of CPU utilization, memory usage, and messages were helpful in determining capacity specs, but they are less than adequate for real-world runtime monitoring. You get resource metrics for the entire system, but not for individual queries, and the message information is limited to number of messages sent. Furthermore, enterprise monitoring is available only via SNMP — not via the Studio interface. (Editor's note: Latency statistics and an SNMP adapter that will allow you to incorporate runtime metrics directly into processes are listed among the improvements in version 4.8.)
On the plus side, CCL is both powerful and easy to use. Developers get great constructs for aggregating data sets and managing data windows — supporting various time- and frequency-based groupings. Actual pattern-matching constructs could be bolstered, but newly added support for unlimited subqueries is beneficial. Coral8 also provides for design time specification over how the engine manages issues such as delivery guarantee, as well as out-of-order and delayed messages.
Another nice feature here is the ability to pass parameters to query modules — rather than hard-coding them — making for greater runtime flexibility and easier repurposing of query sets.
Coral8 includes some basic, prebuilt functions for general math, string manipulation, and XPath and XML processing. The SDK allows you to build your own functions in C/C++, as well as to tap Java, C#, and Perl for out-of-process adapters. Python is also available but currently undocumented.
Although most of Coral8’s work is typically done in memory, the architecture supports persistence and can push and pull data from external databases to extend the power of queries.
The Enterprise version of Coral8 offers additional benefits by way of basic fail-over protection and clustering of query containers – although a more advanced load-balancing implementation would be useful in spreading the work. This C-based engine (in contrast to the more prevalent Java-based engines in the market) showed no lag during testing.
Extending the reef
In addition to fleshing out the built-in monitoring facilities, I would like to see Coral8 add an admin GUI for managing Coral8 servers and containers. The required hand-tooling of XML configuration files will grow unwieldy in all but the most simplistic of setups.
Looking ahead, I found the preview of a forthcoming BPEL-to-CCL wizard quite promising. The tool reads in BPEL-based BPM process definitions, meshes it with your Coral8 schema definitions, and generates a native CCL query module. The ability to put Coral8 to work monitoring business processes has tremendous potential for improving business outcomes.
Coral8 Engine offers a powerful means of scanning real-time data streams for business meaning and facilitating immediate action. Despite some shortcomings in this still-maturing product’s feature set, the easy-to-use tools and comfortable programming language will get development teams moving. This is a solid CEP solution with the potential to quickly and affordably bring real-time intelligence to your business.
Developer tools (35.0%)
Overall Score (100%)
|Coral8 Engine 4.6||6.0||6.0||8.0||7.0||10.0||8.0|
Having trouble installing and setting up Win10? You aren’t alone. Here are many of the most common...
Picking an Android phone can be difficult, but we're here to help. These are the top Android phones you...
Confidence in our power over machines also makes us guilty of hoping to bend reality to our code
Sponsored by Intel
Sponsored by Puppet
With new hardware hacking devices, it's absurdly easy to attack organizations through the USB port of...
Android provides a model for Apple to use in iOS, and Apple has an option for CarPlay that should get...
Not only is data integration an afterthought in most cloud migrations, it's usually addressed with...
The budding language with Ruby's syntax and written in Go is aimed at microservices development