簡體   English   中英

如何反序列化Kafka內部主題__consumer_offsets數據

[英]How to de-serialize kafka internal topic __consumer_offsets data

我正在嘗試使用kafka-python客戶端從Kafka內部主題__consumer_offsets讀取數據。 我創建了使用者並成功獲取了數據,但問題是數據已序列化並且看起來像是有線格式,我想將此數據反序列化為某種可讀格式,我發現kafka消費者api中有可用的key_deserialize和value_deserialize選項,但是問題是我不知道應該為這些領域賦予什么價值,有人可以在這方面幫助我嗎?

我的消費者代碼看起來像

 consumer = KafkaConsumer(bootstrap_servers=Settings.instance().kafka_server,
                                     consumer_timeout_ms=2000,
                                     enable_auto_commit="False",
                                     exclude_internal_topics="False",
                                     value_deserializer = bytes.decode, # not working•
                                     group_id=self._group_id
                                    )

和消耗的消息看起來像::

ConsumerRecord(topic='__consumer_offsets', partition=26, offset=12983, timestamp=1520765864606, timestamp_type=0, key=b'
\x00\x01\x00\x16console-consumer-56707\x00\x06events\x00\x00\x00\x00', value=b'\x00\x01\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x01b\x14\xb5\x8a\x9d\x00\x00\x01b\x19\xdb\
xe6\x9d', checksum=-1872169212, serialized_key_size=38, serialized_value_size=28)

好吧,您需要實現自定義的Serializer(在生產者端)和Deserializer(在消費者端)。 確保在消費者端的類路徑上放置與生產者相同的自定義值類。

public class CustomDeserializer implements Deserializer<ValueClass> {
    public CustomDeserializer() {
    }

    public void configure(Map<String, ?> map, boolean b) {
    }

    public ValueClass deserialize(String s, byte[] MessageBytes) {
        ValueClass eEventMessage = null;
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            eEventMessage = (ValueClass)objectMapper.readValue(MessageBytes, ValueClass.class);
        } catch (IOException ex) {
  //               your stuffs
        }

        return eEventMessage;
    }

    public void close() {
    }
}

在用戶端屬性上設置此自定義類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM