在Kafka中处理数据流

时间:2019-04-08 09:19:27

标签: apache-kafka

我正在尝试建立一个kafka用户以处理来自kafka流的数据。我能够建立与流的连接,并且可以看到数据,但这是特殊字符和ASCII的混合。

我正在使用内置的kafka控制台,但也尝试了confluent-kafka的python版本。唯一需要遵循的参数是将SASL_PLAINTEXT安全协议与SCRAM-SHA-256配合使用。我愿意使用其他方法来解析输出(如果可能的话,请不要使用Java)。

Kafka控制台

bin/kafka-console-consumer.sh --bootstrap-server server:9092 \
--topic TOPIC --from-beginning --consumer.config=consumer.properties

融合的Kafka Python

topics = "TOPIC"
conf = {
        "bootstrap.servers": "server:9092",
        "group.id": "group",
        "security.protocol": "SASL_PLAINTEXT",
        "sasl.mechanisms" : "SCRAM-SHA-256",
}
c = Consumer(conf)
c.subscribe([topics])
running = True
while running:
        message = c.poll()
        print(message.value())
c.close()

输出

PLE9K1PKH3S0MAY38ChangeRequest : llZYMEgVmq2CHG:Infra RequestKSUSMAINCHANGEKC-10200-FL01DATA_MISSINGCHGUSD
DATA_MISSINGDATA_MISSINGUSD
CANCEL

▒▒12SLM:Measurement"Schedule(1 = 0)USDUSD▒▒▒
                                                              l▒l▒V?▒▒▒
                                                                       llZYMEgVmq
company_team team_nameTEAM###SGP000000140381PPL000002020234
Latha M▒>▒>▒ChangeRequest
hello:1234543534 cloud abcdef▒▒▒
                                                         ▒Ի▒
                                                            ▒▒▒
                                                               John Smithjs12345SGP000000140381▒NPPL000002020234
▒Ի▒

我最初尝试解析标准输出上的数据,但最后希望是将解析后的数据保存到数据库中。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

似乎您已将邮件编码为二进制格式。要打印这些文件,您将需要设置一个二进制解码器,并将其通过。如果您使用特定的架构生成它们,则可能还需要使用包含给定主题的架构的架构注册表来反序列化对象。您正在寻找以下方面的东西:

message_bytes = io.BytesIO(message.value())
decoder = BinaryDecoder(message_bytes)

答案 1 :(得分:-1)

正如贾瓦利斯(Jaivalis)所提到的,在您用来提取数据的生产者和消费者之间似乎不匹配。 Kafka Streams公开了两个属性,用于控制通过拓扑的数据的序列化和反序列化。 default.value.serde,default.key.serde。我建议检查您的流应用程序的配置,以找到适合消费者使用的反序列化器。

https://kafka.apache.org/documentation/#streamsconfigs

但是请注意,您的流应用程序实现可能会覆盖这些Serdes。一定还要检查您的实现,以确保找到正确的序列化格式。

https://kafka.apache.org/21/documentation/streams/developer-guide/datatypes.html#overriding-default-serdes