Python 当源代码为Kafka-Avro格式时,如何在Memsql中创建转换

Python 当源代码为Kafka-Avro格式时,如何在Memsql中创建转换,python,apache-kafka,singlestore,confluent-platform,confluent-schema-registry,Python,Apache Kafka,Singlestore,Confluent Platform,Confluent Schema Registry,我能够将数据从Kafka推送到Memsql 我正在尝试使用Transform推送。我已经用Python创建了Kafka Consumer,它正在使用Kafka主题中的数据并转换为Json格式 我不知道如何在Memsql中将其用作转换 from confluent_kafka import KafkaError from confluent_kafka.avro import AvroConsumer from confluent_kafka.avro.serializer import Seri

我能够将数据从Kafka推送到Memsql

我正在尝试使用Transform推送。我已经用Python创建了Kafka Consumer,它正在使用Kafka主题中的数据并转换为Json格式

我不知道如何在Memsql中将其用作转换

from confluent_kafka import KafkaError
from confluent_kafka.avro import AvroConsumer
from confluent_kafka.avro.serializer import SerializerError
import sys

c = AvroConsumer({
    'bootstrap.servers': 'X.Y.Z.W:9092',
    'group.id': 'groupid1112',
    'schema.registry.url': 'http://X.Y.Z.W:8081',
    'default.topic.config': {
        'auto.offset.reset': 'smallest'
    }
    })

c.subscribe(['test_topic'])
count =0
while True:
    try:
        msg = c.poll(10)

    except SerializerError as e:
        print("Message deserialization failed for {}: {}".format(msg, e))
        break

    if msg is None:
        continue

    if msg.error():
        if msg.error().code() == KafkaError._PARTITION_EOF:
            continue
        else:
            print(msg.error())
            break
    valueList = list(msg.value().values())
    print(valueList)

c.close()
这是pritning

[1518776144187, 1, 2, 103,'asas',asas'eer',None]
检查这些文件

请继续关注即将发布的MemSQL版本中对本机avro的支持

你会想做下面的事情,但我会在avro的具体细节上画草图,因为我对avro库一无所知

```

```


使用模式注册表应该可以,但您不必担心在转换脚本中读取kafka的细节。周一我可以尝试给你一个更详细的脚本,但这是如何构造代码的。

我已经阅读了docs man,但是没有办法在管道中配置注册表,所以我只问了如何在avro案例中使用transform。请尝试
print(msg.value())
,否则MemSQL有一个JDBC驱动程序,您可以使用JDBC Kafka Connect读取Avro数据并写入MemSQL
def input_stream():
    """
        Consume STDIN and yield each record that is received from MemSQL
    """
    while True:
        byte_len = sys.stdin.read(8)
        if len(byte_len) == 8:
            byte_len = struct.unpack("L", byte_len)[0]
            result = sys.stdin.read(byte_len)
            yield result
        else:
            assert len(byte_len) == 0, byte_len
            return

avro_context = WhateverYouNeed() # maybe connect to schema registry here if you need to

for msg in input_stream():
    object = DeserializeAvro(avro_context, msg) # this is your code
    sys.stdout.write(SerializeToTSV(object)) # also your code