0

浮士德文档中,它指出当更改主题的键/值模型时,它是不兼容的更改。它声明所有浮士德实例都必须重新启动。

如何在不停机的情况下更改键/值?由另一个库(例如生成的 Protobuf 代码)执行反序列化是否更有意义?当以向后兼容的方式更新生成的 Protobuf 代码时,以下代码是否会规避停机时间要求(proto/greetings_pb2.py生成的代码)?

# app.py
import faust
from .proto.greetings_pb2 import Greeting
from .proto_serializer import ProtobufSerializer

greetings_schema = faust.Schema(
    key_serializer=ProtobufSerializer(pb_type=Greeting),
    value_serializer=ProtobufSerializer(pb_type=Greeting),
)
# proto_serializer.py
from faust.serializers import codecs
from typing import Any

from google.protobuf import json_format
from google.protobuf.json_format import MessageToJson
from google.protobuf.json_format import MessageToDict
from google.protobuf import text_format
from google.protobuf.text_format import MessageToString
from google.protobuf.text_format import MessageToBytes

class ProtobufSerializer(codecs.Codec):
    def __init__(self, pb_type: Any):
        self.pb_type = pb_type
        super(self.__class__, self).__init__()

    def _dumps(self, pb: Any) -> bytes:
        return pb.SerializeToString()

    def _loads(self, s: bytes) -> Any:
        pb = self.pb_type()
        pb.ParseFromString(s)
        return pb
4

0 回答 0