【发布时间】:2018-06-04 08:21:09
【问题描述】:
我在文件 data.bin 中有一些序列化的 AVRO 数据(可打印和不可打印字符的混合),我通过 Kafka 控制台客户端将其发送到名为 topicname 的主题。当我从主题中通过控制台客户端(或我的 java 代码)读取它时,数据已损坏。文字可以,但不可打印的字符不行。
制作人:
user@server$ cat data.bin --------------- binary data, serialized AVRO (mix of printable and not printable characters)
▒▒▒▒▒▒XBADVANCED....
user@server$ hexdump data.bin
0000000 0000 0100 00ff 0000 0202 0200 a286 a882
0000010 58f7 0000 0000 0000 0002 0202 4142 5644
.......
user@server$ ./kafka-console-producer.sh --broker-list server:port --topic topicname < data.bin
JAVA HOME:
user@server$
然后我尝试由控制台消费者从主题中读取它:
消费者:
user@server$ ./kafka-console-consumer.sh --bootstrap-server server:port --topic topicname
JAVA HOME:
������XBADVANCED..... ----------- see the not prinable data at the beginning, they are different the the original, the printable characters are ok
^CProcessed a total of 1 messages
user@server$ ./kafka-console-consumer.sh --bootstrap-server server:port --topic topicname > outputdata.bin
^CProcessed a total of 1 messages
dev@pardbd3:bin$ hexdump outputdata.bin
0000000 414a 4156 4820 4d4f 3a45 0a20 0000 0100 ----------- it starts with "JAVA HOME:" string, real begin of the data is 0000 0100 bfef 00bd 0000 0202 0200 bfef efbd bdbf ....
0000010 bfef 00bd 0000 0202 0200 bfef efbd bdbf
.....
如您所见,数据的文本部分正常,但不可打印的字符被转换为另一个不可打印的字符。什么问题,有没有任何Kafka配置可能导致这个问题?
【问题讨论】:
-
我认为这不是一个好的测试,因为在内部它使用带有消息格式化程序的
https://github.com/kafka-dev/kafka/blob/master/core/src/main/scala/kafka/consumer/ConsoleConsumer.scala,因此您可能会遇到字符编码问题。我会选择字节数组序列化器/解串器 -
@Paizo 错误的 repo - 它在 Apache Github org 中
标签: apache-kafka binaryfiles avro