apache-kafka - Kafka 序列化/反序列化复杂对象
问题描述
我需要生产者序列化并发送一个包含字节缓冲区(视频块)和字符串的自定义对象:
public class NvrWSBinaryMessage {
private String messageUuid;
private final ByteBuffer payload;
...
并让消费者正确反序列化。
我还没有找到为具有 ByteBuffer 的对象创建自定义序列化器/反序列化器的正确方法。我试图将对象作为字节数组发送,但没有成功。
解决方案
您可以将ByteBufferSerializer
/ByteBufferDeserializer
用于您的 kafka 客户端(生产者/消费者),但是,这将要求您将其ByteBuffer payload
作为 kafka 消息/记录值和String messageUuid
密钥发送。序列化 2.8 文档
如果您没有这种灵活性,那么我建议在您要作为记录值发送的对象上利用 jackson 注释(类似于referenceJsonSerializer
),并为您的客户使用/ JsonDeserializer
。
序列化会将对象转换为字节码格式,因此在将保存字节作为要序列化的值而无需任何额外配置的情况下传递对象时会变得很棘手。注释用于消除任何序列化歧义,从而允许 Kafka 提供的序列化程序毫无问题地完成工作。
推荐阅读
- ruby-on-rails - Rails,禁用某些控制器的 cookie/会话
- google-data-studio - G Data Studio - forFilterOnly 的用途?
- python - 熊猫,按重复N次的列删除重复项
- bash - 如何使用 bash 脚本创建可执行脚本以逐个运行作业?
- php - 从 PHP 查询 Ms SQL 服务器返回无效名称
- excel - 涉及日期的多条件查找数组的多个匹配项
- protocols - 如何识别与 Modbus 锅炉通信的协议和端口设置
- flutter - 如何在行数据颤动中设置对齐方式?
- c# - 如何修复:“无法将类型隐式转换为‘字符串’”错误
- django - 禁止进入以继续 Django 调查中的下一个问题