From 3e1628bd542b6da9dec445bd65e407df91ed184d Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Mon, 13 May 2019 23:41:17 +0200 Subject: [PATCH] Add scdf-python-app. fix polyglot-python-task issue --- .../polyglot-python-task/util/task_args.py | 6 +- .../polyglot/scdf-python-app/Dockerfile | 9 +++ .../polyglot/scdf-python-app/README.md | 25 ++++++ .../polyglot/scdf-python-app/barista_app.py | 71 ++++++++++++++++ .../polyglot/scdf-python-app/requirements.txt | 3 + .../scdf-barista-python-polyglot.png | Bin 0 -> 74653 bytes .../recipes/polyglot/scdf-python-app/test.py | 11 +++ .../polyglot/scdf-python-app/util/__init__.py | 0 .../polyglot/scdf-python-app/util/actuator.py | 56 +++++++++++++ .../scdf-python-app/util/arguments.py | 76 ++++++++++++++++++ 10 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/Dockerfile create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/README.md create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/barista_app.py create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/requirements.txt create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/scdf-barista-python-polyglot.png create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/test.py create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/util/__init__.py create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/util/actuator.py create mode 100644 dataflow-website/recipes/polyglot/scdf-python-app/util/arguments.py diff --git a/dataflow-website/recipes/polyglot/polyglot-python-task/util/task_args.py b/dataflow-website/recipes/polyglot/polyglot-python-task/util/task_args.py index 2b4fd73..81bf50b 100644 --- a/dataflow-website/recipes/polyglot/polyglot-python-task/util/task_args.py +++ b/dataflow-website/recipes/polyglot/polyglot-python-task/util/task_args.py @@ -16,8 +16,10 @@ def get_cmd_arg(name): for k, v in ((k.lstrip('-'), v) for k, v in (a.split('=') for a in sys.argv[1:])): d[k].append(v) - return d[name][0] - + if bool(d[name]): + return d[name][0] + else: + return None def get_db_url(): """Computes sqlalchemy connection URL diff --git a/dataflow-website/recipes/polyglot/scdf-python-app/Dockerfile b/dataflow-website/recipes/polyglot/scdf-python-app/Dockerfile new file mode 100644 index 0000000..128c72a --- /dev/null +++ b/dataflow-website/recipes/polyglot/scdf-python-app/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.7.3-slim + +RUN pip install kafka-python +RUN pip install flask + +ADD /util/* /util/ +ADD barista_app.py / +ENTRYPOINT ["python","/barista_app.py"] +CMD [] \ No newline at end of file diff --git a/dataflow-website/recipes/polyglot/scdf-python-app/README.md b/dataflow-website/recipes/polyglot/scdf-python-app/README.md new file mode 100644 index 0000000..9c49584 --- /dev/null +++ b/dataflow-website/recipes/polyglot/scdf-python-app/README.md @@ -0,0 +1,25 @@ + +Build docker image and push to Docker Hub. +```bash +docker build -t tzolov/scdf_python_app:0.1 . +docker push tzolov/scdf_python_app:0.1 +``` +NOTE: replace `tzolov` with your docker hub prefix. + +Register the docker image as SCDF `app` application: +```bash +app register --type app --name barista-app --uri docker://tzolov/scdf_python_app:0.1 +``` + +Build the Bar pipelines: +```bash +stream create --name orders --definition "customer: time > :orders" --deploy +stream create --name cold-drink-line --definition ":coldDrinks > cold-drinks: log" --deploy +stream create --name hot-drink-line --definition ":hotDrinks > hot-drinks: log" --deploy +stream create --name bar --definition "barista-app" +stream deploy --name bar --properties app.barista-app.spring.cloud.stream.bindings.orders.destination=orders,app.barista-app.spring.cloud.stream.bindings.hot.drink.destination=hotDrinks,app.barista-app.spring.cloud.stream.bindings.cold.drink.destination=coldDrinks +``` + +![alt text](./scdf-barista-python-polyglot.png "Logo Title Text 1") + + diff --git a/dataflow-website/recipes/polyglot/scdf-python-app/barista_app.py b/dataflow-website/recipes/polyglot/scdf-python-app/barista_app.py new file mode 100644 index 0000000..5f96c2d --- /dev/null +++ b/dataflow-website/recipes/polyglot/scdf-python-app/barista_app.py @@ -0,0 +1,71 @@ +from kafka import KafkaConsumer, KafkaProducer +from kafka.admin import KafkaAdminClient, NewTopic +from kafka.errors import TopicAlreadyExistsError + +from util.actuator import Actuator +from util.arguments import get_kafka_brokers, get_env_info, get_channel_topic + + +class Barista: + """Barista continuously process input drink orders and servers hot drinks for the even order numbers and cold drink + for the ood orders. + The orders come through the `orders` input channel. The hot and cold drinks are served through either the + `hot.drink` or the `cold.drink` output channels. + + :param info: Information about the app configuration. + :param kafka_brokers: Kafka brokers connection uri. + :param orders: Orders topic name. + :param hot_drinks: Hot drinks topic name. + :param cold_drinks: Cold drinks topic name. + """ + + def __init__(self, info, kafka_brokers, orders, hot_drinks, cold_drinks): + + self.kafka_brokers = kafka_brokers + self.orders_topic = orders + self.hot_drink_topic = hot_drinks + self.cold_drink_topic = cold_drinks + + # Serve the liveliness and readiness probes via http server in a separate thread. + Actuator.start(port=8080, info=info) + + # Ensure the output topics exist. + self.__create_topics_if_missing([self.orders_topic, self.hot_drink_topic, self.cold_drink_topic]) + + self.consumer = KafkaConsumer(self.orders_topic, bootstrap_servers=self.kafka_brokers) + self.producer = KafkaProducer(bootstrap_servers=self.kafka_brokers) + + def __create_topics_if_missing(self, topic_names): + admin_client = KafkaAdminClient(bootstrap_servers=self.kafka_brokers, client_id='test') + for topic in topic_names: + try: + new_topic = NewTopic(name=topic, num_partitions=1, replication_factor=1) + admin_client.create_topics(new_topics=[new_topic], validate_only=False) + except TopicAlreadyExistsError: + print ('Topic: {} already exists!') + + def process_orders(self): + """ + Continuously consumes orders form the input channel and send hot or cold drinks to the output channels. + The even order number stands for a hot drink request while an odd number stands for a cold drink request. + """ + while True: + for message in self.consumer: + if message.value is not None: + if self.is_even_order(message.value): + self.producer.send(self.hot_drink_topic, b'Serve Hot drink for order:' + message.value) + else: + self.producer.send(self.cold_drink_topic, b'Serve Cold drink for order:' + message.value) + + @staticmethod + def is_even_order(value): + return int(value[-1:]) % 2 == 0 + + +Barista( + get_env_info(), + get_kafka_brokers(), + get_channel_topic('orders'), + get_channel_topic('hot.drink'), + get_channel_topic('cold.drink') +).process_orders() diff --git a/dataflow-website/recipes/polyglot/scdf-python-app/requirements.txt b/dataflow-website/recipes/polyglot/scdf-python-app/requirements.txt new file mode 100644 index 0000000..5ec7000 --- /dev/null +++ b/dataflow-website/recipes/polyglot/scdf-python-app/requirements.txt @@ -0,0 +1,3 @@ +kafka +kafka-python +flask diff --git a/dataflow-website/recipes/polyglot/scdf-python-app/scdf-barista-python-polyglot.png b/dataflow-website/recipes/polyglot/scdf-python-app/scdf-barista-python-polyglot.png new file mode 100644 index 0000000000000000000000000000000000000000..0d4e0564aaf4359ca4eaaa74e3cf2b93671e7f4f GIT binary patch literal 74653 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.destination=. + The represents the name of the channel being configured (for example, input or output). + + :param channel_name: logical channel name as defined in the application. + :return: The target destination of a channel on the bound middleware (for example, the RabbitMQ exchange or Kafka + topic). If the channel is bound as a consumer, it could be bound to multiple destinations, and the + destination names can be specified as comma-separated String values. + """ + return get_cmd_arg('spring.cloud.stream.bindings.{}.destination'.format(channel_name)) + + +def get_kafka_brokers(): + return os.getenv('SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS', '') + + +def get_kafka_zk_nodes(): + return os.getenv('SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODES', '') + + +def get_application_guid(): + return os.getenv('SPRING_CLOUD_APPLICATION_GUID', '') + + +def get_application_group(): + return os.getenv('SPRING_CLOUD_APPLICATION_GROUP', '') + + +def get_env_info(): + props = ' stream-name={}\n app-name={}\n app-guid={}\n app-group={}\n kafka-brokers={}\n ' \ + 'kafka-zk={}\n'.format(get_stream_name(), get_stream_app_label(), get_application_guid(), + get_application_group(), get_kafka_brokers(), get_kafka_zk_nodes()) + channels = ' Inputs:\n orders={}\n Outputs: \n hot.drink={}\n cold.drink={}\n'.format( + get_channel_topic('orders'), get_channel_topic('hot.drink'), get_channel_topic('cold.drink')) + args = '\n '.join(sys.argv) + envs = '' + # envs = '\n '.join(list(map(lambda k: '{}={}'.format(k, os.environ[k]), os.environ))) + return 'Properties\n{0}\nChannels\n{1}\nArguments\n {2}\n\nEnvironment\n {3}'.format( + props, channels, args, envs)