we are currently in the process of evaluating Zeebe for integration into our Microservice Platform. For our saas business model we are in the process of building a platform which consists of “primitive” business processes which can be wired together into client specific business flows. We want to deliver individually composed, scalable products for our clients on our platform. According to the marketing blurb Zeebe is an exact fit for our solution requirements.
However, we have some questions where we hope that the answers will increase our confidence
- Circumstances and basic solution idea: We have specific platform modules (i.e. microservices) which offer “primitive” business processes. Primitive in the sense, that they have to be composed into higher order processes in order to deliver value to platform clients. That’s where Zeebe comes into play. We want to introduce Zeebe to our orchestration layer in order to bring together (wire into a sequence) different primitive processes into a valuable whole. Right now those primitive processes are implemented using either Camunda or hand crafted components. Going forward we want to take a uniform approach to implementing processes and are considering using Zeebe both in the layer of primitive and orchestration processes. With respect to the primitive process layer Zeebe will degenerate to always delegate task execution of primitive processes back into the service owning the process definition. Basically we see the need for process composition in different layers. Also we think the BPMN expressivity supported by Zeebe is good enough for us. Do you endorse this approach? Is our understanding of process composition in terms of having an orchestrating process where each task possibly represents a whole process taking place in another service valid?
- Regarding process versioning and in-place migrations. As far as I understand Zeebe offers versioning of process definitions. Is there any systematic support for migrating a process instance in one version to another version? In your experience, is that something wich is needed at all? We may have long running processes and I imagine we don’t want to keep task execution code for multiple versions of process definitions around.
- The docs are a little sparse on error semantics. What happens in the event of task workers not being able to finish their task? From what I understand after a specific timeout another task worker will receive the task. What if that one also fails? Is there any way to report failures back to Zeebe? Is that something we will have to model “in-band”? What would be really helpful in terms of getting to understand the behavior would be a docker-compose example application which illustrates certain scenarios. Do you know of such an example?
- On https://zeebe.io/ you write “Zeebe workflows can react to messages published to Apache Kafka and more”. However, I cannot find anything specific to that in the docs. Do you refer to https://github.com/berndruecker/kafka-connect-zeebe with that? Does integration of Zeebe workflows and messaging solutions yield value which is not otherwise provided by vanilla Zeebe?
Thank you everyone for your answers in advance!