Я могу использовать KafkaTool и kafka-console-consumer
для просмотра данных из темы __consumer_offset
, но я не могу понять, как анализировать данные в python, если я читаю их напрямую с помощью своего собственного пользовательского инструмента. Даже при использовании KafkaTool я не могу точно расшифровать ключ и значение, есть странные символы, которые, кажется, не следуют никакому шаблону. Я думаю, это связано с тем, как Scala упорядочивает данные в необработанные байты.
Вот формат ключа: [short: версия] [string: группа] [string: тема] [int32: раздел], который можно получить из https://github.com/apache/kafka/blob/trunk./core/src/main/scala/kafka/coordinator/group/GroupMetadataManager.scala — это предполагает версию 0, которая у меня есть.
Вот пример ключа в шестнадцатеричном формате: 00 01 00 16 63 6F 6E 73 6F 6C 65 2D 63 6F 6E 73 75 6D 65 72 2D 39 37 30 38 32 00 0D 73 74
61 67 69 6E 67 2D 73 70 65 6E 64 00 00 00 26
Теперь просматривая эти байты -
00
- версия 0
01 00
- начало заголовка, ноль... ладно, понятно, но другие сообщения начинаются с 02 00
16 63 6F 6E 73 6F 6C 65 2D 63 6F 6E 73 75 6D 65 72 2D 39 37 30 38 32
- Похоже, хорошие данные
00 0D
- Null, возврат каретки… хорошо, но у других есть 00 0C
73 74
61 67 69 6E 67 2D 73 70 65 6E 64
- хорошие данные («постановка-затраты»)
00 00 00 26
- Я думаю, это конец строки плюс раздел, и в этом случае 00 00
обозначает конец строки??
Похожие проблемы/несоответствия с сообщением. Как именно форматируются данные, чтобы я мог разобрать их на строковые значения?