我在本地工作时使用 kcat 检查 kafka 主题的内容,但是,当使用 protobuf 序列化消息时,我得到的结果是不可读的编码字符流。我知道存在其他一些 kafka 消费者工具(Kafdrop、AKHQ、Kowl、Kadek...),但我正在寻找适合我的需求的最简单的选项。
kcat 支持从 protofile 反序列化 protobuf 键/值吗?
有没有任何简单的基于终端的工具可以实现这一点?
我很幸运地使用了这个命令:
kcat -C -t <topic> -b <kafkahost>:9092 -o -1 -e -q -D "" | protoc --decode=<full message class> path/to/my.proto --proto_path <proto_parent_folder>
更新 12/2023 - 这是一个更精简的命令,具有更好的指导。
kcat -C -t <topic> -b <kafkahost>:9092 -o -1 -e -q -D "" | protoc --decode <package>.<Message Type> my.proto
package
文件中定义的.proto
在哪里,<Message Type>
是消息的名称。
即:
user.proto
:
package some.package;
message User {
string id = 1;
string email = 2;
}
命令是:
kcat -C -t <topic_name> -b host.docker.internal:9092 -o -1 -e -q -D "" | protoc --decode some.package.User user.proto
任何简单的基于终端的工具都可以实现这一点
仅与 Confluence Schema Registry 集成的工具(这些链接工具也使用这些工具),例如
kafka-protobuf-console-consumer
已经是 Confluence 平台的一部分。
关于
kcat
- 请参阅 https://github.com/edenhill/kcat/issues/72 和链接的问题