#283: Added basic Kafka testcase that executes a workflow
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
```
|
||||||
|
curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-kafka/master/docker-compose.yml > docker-compose.yml
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
version: "2"
|
||||||
|
|
||||||
|
services:
|
||||||
|
zookeeper:
|
||||||
|
image: docker.io/bitnami/zookeeper:3
|
||||||
|
ports:
|
||||||
|
- "2181:2181"
|
||||||
|
volumes:
|
||||||
|
- "zookeeper_data:/bitnami"
|
||||||
|
environment:
|
||||||
|
- ALLOW_ANONYMOUS_LOGIN=yes
|
||||||
|
kafka:
|
||||||
|
image: docker.io/bitnami/kafka:2
|
||||||
|
ports:
|
||||||
|
- "9092:9092"
|
||||||
|
volumes:
|
||||||
|
- "kafka_data:/bitnami"
|
||||||
|
environment:
|
||||||
|
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
|
||||||
|
- ALLOW_PLAINTEXT_LISTENER=yes
|
||||||
|
depends_on:
|
||||||
|
- zookeeper
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
zookeeper_data:
|
||||||
|
driver: local
|
||||||
|
kafka_data:
|
||||||
|
driver: local
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
import json
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
from time import sleep
|
||||||
|
from kafka import KafkaProducer, KafkaConsumer
|
||||||
|
import kafka
|
||||||
|
|
||||||
|
shuffle_url = os.getenv("SHUFFLE_URL")
|
||||||
|
shuffle_apikey = os.getenv("SHUFFLE_APIKEY")
|
||||||
|
shuffle_workflow = os.getenv("SHUFFLE_WORKFLOW")
|
||||||
|
|
||||||
|
headers = {"Authorization": "Bearer %s" % shuffle_apikey}
|
||||||
|
topic = "workflow_%s" % shuffle_workflow
|
||||||
|
server = "localhost:9092"
|
||||||
|
def produce():
|
||||||
|
print("Starting producer")
|
||||||
|
producer = KafkaProducer(
|
||||||
|
bootstrap_servers=[server],
|
||||||
|
value_serializer=lambda x:
|
||||||
|
json.dumps(x).encode('utf-8')
|
||||||
|
)
|
||||||
|
|
||||||
|
print("Adding data!")
|
||||||
|
for e in range(15):
|
||||||
|
data = {"some": e, "data": "luuuuul"}
|
||||||
|
|
||||||
|
try:
|
||||||
|
ret = producer.send(topic, value=data)
|
||||||
|
print(ret.get())
|
||||||
|
except kafka.errors.KafkaTimeoutError as e:
|
||||||
|
print("Kafka error: %s" % e)
|
||||||
|
continue
|
||||||
|
|
||||||
|
def consume():
|
||||||
|
print("Starting consumer")
|
||||||
|
consumer = KafkaConsumer(
|
||||||
|
topic,
|
||||||
|
bootstrap_servers=[server],
|
||||||
|
auto_offset_reset="earliest",
|
||||||
|
enable_auto_commit=True,
|
||||||
|
value_deserializer=lambda x: json.loads(x.decode('utf-8'))
|
||||||
|
)
|
||||||
|
|
||||||
|
print("Getting data")
|
||||||
|
for message in consumer:
|
||||||
|
message = message.value
|
||||||
|
print("MSG: ", message)
|
||||||
|
ret = requests.post("%s/api/v1/%s/execute" % shuffle_url, headers=headers, data=message)
|
||||||
|
print(ret.status_code)
|
||||||
|
print(ret.text)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
produce()
|
||||||
|
#consume()
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
kafka
|
||||||
|
kafka-python
|
||||||
Reference in New Issue
Block a user