私は、Python 2.7とApache Avro(Pythonクライアント)を使用して、kafkaブローカーを通してシリアル化されたメッセージを交換しようとしています。以前にスキーマを作成せずにメッセージをやりとりする方法があるかどうかを知りたい。Python - スキーマレスApache Avroデータのシリアル化
これはコード(スキーマを使用して、sensor.avsc、私は避けたいもの)である:
from kafka import SimpleProducer, KafkaClient
import avro.schema
import io, random
from avro.io import DatumWriter
# To send messages synchronously
kafka = KafkaClient('localhost:9092')
producer = SimpleProducer(kafka, async = False)
# Kafka topic
topic = "sensor_network_01"
# Path to user.avsc avro schema that i don't want
schema_path="sensor.avsc"
schema = avro.schema.parse(open(schema_path).read())
for i in xrange(100):
writer = avro.io.DatumWriter(schema)
bytes_writer = io.BytesIO()
encoder = avro.io.BinaryEncoder(bytes_writer)
# creation of random data
writer.write({"sensor_network_name": "Sensor_1", "value": random.randint(0,10), "threshold_value":10 }, encoder)
raw_bytes = bytes_writer.getvalue()
producer.send_messages(topic, raw_bytes)
これはsensor.avscファイルです:
{
"namespace": "sensors.avro",
"type": "record",
"name": "Sensor",
"fields": [
{"name": "sensor_network_name", "type": "string"},
{"name": "value", "type": ["int", "null"]},
{"name": "threshold_value", "type": ["int", "null"]}
]
}