java - 如何在 KSQLDB 查询的行中使用 protobuf 反序列化?
问题描述
我试图在我的 KSQLDB 应用程序中用 Java 标准化反序列化,但我很难理解如何处理Row
KSQLDB 类型返回的Client
类型。Ex(删除尝试/捕获):
import io.confluent.ksql.api.client.Client;
import io.confluent.ksql.api.client.BatchedQueryResult;
Client ksqldbClient = kafkaService.getKSQLDBClient();
String queryString = String.format("SELECT * FROM %s WHERE %s = '%s';", tableName, primaryKeyName, id);
BatchedQueryResult query = ksqldbClient.executeQuery(queryString);
List<Row> rows = query.get();
我的 KSQLDB 表配置为使用 protobuf 序列化,但似乎Row
类型是 JSON?我只能通过以下方式获取其数据:
for (Row row : rows) {
String json = row.asObject().toJsonString();
// Deserialize json string
...
}
KSQLDB 客户端是否仅自己处理 protobuf 反序列化?有没有办法只获取 protobuf 字节,这样我就可以将它传递到我已经定义的 Protobuf 反序列化器中,这样我就不需要编写 JSON 反序列化器了?
解决方案
row.asObject()
返回一个已经反序列化的 KsqlObject,其操作与 JDBC ResultSet 类似,因为您可以在其上为行中的类型调用各种 get 方法。
如果您想映射到从 Protobuf 生成的特定域对象,似乎没有直接的方法,如果您需要该功能,最好直接使用 Kafka Streams 而不是 KSQL
推荐阅读
- ruby-on-rails - Bootstrap 4 - Rails 5 下拉菜单在手机上不起作用
- html - 将照片添加到 XML 文件时遇到问题
- r - 使用 R 操作 Excel 文件
- ignition - Ignition SDK 网关配置显示路径,而不是字符串
- c# - 操作被外部 API 调用时不会创建 cookie
- codenameone - spanlabel 组件不显示所有文本
- r - 如何使具有相应小 Y 值的 X 值在直方图中更明显
- excel - 使用 If 语句循环特定工作表时出现空错误
- c - 我不能在数组中使用双精度吗?
- android - Android 处理 onStop 和 onDestroy 用户行为