Firebird/Introduction: Difference between revisions

From stonehomewiki
Jump to navigationJump to search
No edit summary
 
(20 intermediate revisions by the same user not shown)
Line 1: Line 1:
<p> [[Firebird]] </p>
<p> [[Firebird]] </p>


= Beirf =
<div class="toccolours mw-collapsible mw-collapsed expandable">
<div class="toccolours mw-collapsible mw-collapsed expandable">
<div class="mw-collapsible-preview">Brief</div>
<div class="mw-collapsible-preview">Brief</div>
<div class="mw-collapsible-content">
<div class="mw-collapsible-content">
* [https://github.com/stonezhong/firebird Source Code in Github]
Firebird is a Python based Stream Processing Framework
Firebird is a Python based Stream Processing Framework
* Make it easy to create streaming processing data pipeline using python
* Make it easy to create streaming processing data pipeline using python
* Make it easy to deploy your pipeline to Kubernete Cluster, so your pipeline can run at scale.
* Make it easy to deploy your pipeline to Kubernete Cluster, so your pipeline can run at scale.
* A Management Web UI to visualize your pipeline topology.
* A Management Web UI to visualize your pipeline topology.
* The firebird framework encourage you to write reusable streaming processing unit and encapsulate it in Generator or Node or Sink.
* The firebird framework encourages you to write reusable streaming processing unit and encapsulate it in Generator or Node or Sink.
</div>
</div>
<p></p>
 
= Use Python to build streaming pipeline =
<div class="toccolours mw-collapsible mw-collapsed expandable">
<div class="mw-collapsible-preview"></div>
<div class="mw-collapsible-content">
Your python code could be as simple as below. All you need to do is, create Generates, Nodes and Sinks, and assemble them together using <code>>></code> or <code><<</code> operator. If you have experience with Apache Airflow, you should be quite familiar with this model.
 
<pre><nowiki>
from typing import Any
from firebird import Pipeline, RabbitMQ, Generator, Sink, Node, RabbitMQ
import time
import os
 
class MyGenerator(Generator):
    def pump(self, quit_requested):
        # assuming volume checkpoint is mounted at /checkpoint
        next_number = 0
        if os.path.isfile("/checkpoint/state"):
            with open("/checkpoint/state", "rt") as f:
                next_number = int(f.read())
 
        while not quit_requested.value:
            self.emit(next_number)
            print(f"{self.id}: {next_number}")
            next_number += 1
            time.sleep(1)
       
        with open("/checkpoint/state", "wt") as f:
            f.write(f"{next_number}")
 
class MySink(Sink):
    def on_message(self, port_id:str, data:Any):
        print(f"{self.id}: {data}")
 
class Square(Node):
    def on_message(self, port_id:str, data:Any):
        print(f"{self.id}: {data} -> {data*data}")
        self.emit(data*data)
 
def get_pipeline(mq:RabbitMQ):
    pipeline_id = "test"
 
    pipeline = Pipeline(id=pipeline_id, title="Sample Pipeline", description="This is a sample firebird pipeline", mq=mq)
    src = MyGenerator(id="src", pipeline=pipeline, title="Generate numbers", description="Generate numbers")
    calc = Square(id="calc", pipeline=pipeline, title="Calculate square", description="output = input*input")
    end = MySink(id="end", pipeline = pipeline, title="Display calculation result", description="Display calculation result!")
    src >> calc >> end
    return pipeline
</nowiki></pre>
 
</div>
</div>
<p></p>
 
= Easy to deploy to Kubernete Cluster =
<div class="toccolours mw-collapsible mw-collapsed expandable">
<div class="mw-collapsible-preview">Brief</div>
<div class="mw-collapsible-content">
To deploy your pipeline, you can simple run the command below, you can specify parameter <code>-r</code> to specify how many pods you need to run pipeline, default is 1. Here is an example:
<pre><nowiki>
# it start pipeline "test", using 10 pods to run your pipeline simultaneously.
/usr/src/app # pipeline start -pid test -r 10
</nowiki></pre>
</div>
</div>
<p></p>
 
= Web UI =
<div class="toccolours mw-collapsible mw-collapsed expandable">
<div class="mw-collapsible-preview">Home Page</div>
<div class="mw-collapsible-content">
Home page shows all pipelines. You can see
* <code>ID</code>, each pipeline has a unique id
* <code>Namespace</code>, each pipeline is deployed in a kubernete namespace
* <code>Image</code>, the name of the docker image for the pipeline
* <code>Module</code>, the python module name that contains the main pipeline entry.
* <code>Running</code>, show if the pipeline is currently running or not.
* <code>Description</code>, show the description of the pipeline.
 
<html><img src="https://mywiki.s3.amazonaws.com/firebird-home-ui.png" width="100%"></html>
</div>
</div>
<p></p>
 
<div class="toccolours mw-collapsible mw-collapsed expandable">
<div class="mw-collapsible-preview">Pipeline Page</div>
<div class="mw-collapsible-content">
Show the details of a given pipeline. Here is an example:
 
* <code>ID</code>, each pipeline has a unique id
* <code>Namespace</code>, each pipeline is deployed in a kubernete namespace
* <code>Image</code>, the name of the docker image for the pipeline
* <code>Module</code>, the python module name that contains the main pipeline entry.
* <code>Running</code>, show if the pipeline is currently running or not.
* <code>Description</code>, show the description of the pipeline.
* <code>Diagram</code>, show the topology of the pipeline. You can click each node to see the node details.
* <code>Executors</code>, if the pipeline is running, you can see the status of each executor.
* You can click the "Start" button to start the pipeline
* You can click the "Stop" button to stop the pipeline
<html><img src="https://mywiki.s3.amazonaws.com/firebird-pipeline-ui.png"></html>
 
<br /><br />
<h2>Node dialog box</h2>
If you click a node, or a generator or a sink, you will see a node dialog box, it show the id, title and description of the node. It also shows what are the connected ports, so you know the upstream node and downstream node.
<html><img src="https://mywiki.s3.amazonaws.com/firebird-pipeline-node-dialog-ui.png"></html>
</div>
</div>
</div>
</div>
<p></p>
<p></p>

Latest revision as of 10:51, 15 September 2023

Firebird

Beirf

Use Python to build streaming pipeline

Easy to deploy to Kubernete Cluster

Web UI