Member 14365415 Ответов: 1

Как мне сделать так, чтобы мое значение сообщения Кафки не возвращало тарабарщину?


я через Енисей.Кафка потребляет данные, а мой код-как(c#):

public static class Confluent
{
    public static void Consume()
    {
        var conf = new ConsumerConfig
        {
            GroupId = Guid.NewGuid().ToString(),
            BootstrapServers = "pdkafka.test.com:9092",//"localhost:9092",
            // Note: The AutoOffsetReset property determines the start offset in the event
            // there are not yet any committed offsets for the consumer group for the
            // topic/partitions of interest. By default, offsets are committed
            // automatically, so in this example, consumption will only start from the
            // earliest message in the topic 'my-topic' the first time you run the program.
            AutoCommitIntervalMs = 5000,
            AutoOffsetReset = AutoOffsetReset.Earliest,
            SecurityProtocol = SecurityProtocol.SaslPlaintext,
            SaslMechanism = SaslMechanism.Plain,
            SaslUsername= "test",
            SaslPassword= "123",

        };

        using (var c = new ConsumerBuilder<Ignore, string>(conf).Build())
        {
            c.Subscribe("prj.basedata");//c.Subscribe("test");//传入Topic Name

            CancellationTokenSource cts = new CancellationTokenSource();
            Console.CancelKeyPress += (_, e) =>
            {
                e.Cancel = true; // prevent the process from terminating.
                cts.Cancel();
            };

            try
            {
                while (true)
                {
                    try
                    {
                        var cr = c.Consume(cts.Token);
                        Console.WriteLine($"Consumed message '{cr.Value}' at: '{cr.TopicPartitionOffset}'.");
                    }
                    catch (ConsumeException e)
                    {
                        Console.WriteLine($"Error occured: {e.Error.Reason}");
                    }
                }
            }
            catch (OperationCanceledException)
            {
                // Ensure the consumer leaves the group cleanly and final offsets are committed.
                c.Close();
            }
        }
    }
}


но возвращаемое сообщение имеет такое значение:
\0\0\0\0\u0015\u0002\u001aSandra  LTC75\0\0\0\0\0\0\0\u0002\u001010604012\u0002\u0006ODM\u0002����W\u0002�����W\u0002�����X\u0002�Н��X\u0002�����X\u0002���ރY\u0002���ܯ[\u0002\u00023\u0002\u000e8810074\u0002\bSONY\0\0\u0002\u0002-\u0002�����W\u0002����X\u0002�����W\u0002\u0006LCM\u0002\fPCJ100\u0002����W\u0002�����W\u0002�����X\u0002�Н��X\u0002�����X\u0002���ރY\u0002���ܯ[\u0002\u0018TOM WH HUANG\u0002\u00187PD02M450001\0\u0002\fActive\0\u0002\u00021\u0002\u0002-\0\u0002\u0006132\u0002�\u0003\u0002\u0002I\u0002��Î�Y


Что я уже пробовал:

что я должен сделать, чтобы сделать это нормальным?

пожалуйста,помогите, большое спасибо.

Richard MacCutchan

Перейдите на веб-сайт, который генерирует данные, и запросите у них подробную информацию о формате и содержании.

1 Ответов

Рейтинг:
1

Patrice T

Цитата:
но возвращаемое сообщение имеет такое значение:
\0\0\0\0\u0015\u0002\u001aSandra  LTC75\0\0\0\0\0\0\0\u0002\u001010604012\u0002\u0006ODM\u0002����W\u0002�����W\u0002�����X\u0002�Н��X\u0002�����X\u0002���ރY\u0002���ܯ[\u0002\u00023\u0002\u000e8810074\u0002\bSONY\0\0\u0002\u0002-\u0002�����W\u0002����X\u0002�����W\u0002\u0006LCM\u0002\fPCJ100\u0002����W\u0002�����W\u0002�����X\u0002�Н��X\u0002�����X\u0002���ރY\u0002���ܯ[\u0002\u0018TOM WH HUANG\u0002\u00187PD02M450001\0\u0002\fActive\0\u0002\u00021\u0002\u0002-\0\u0002\u0006132\u0002�\u0003\u0002\u0002I\u0002��Î�Y

Очевидно, что полученное сообщение содержит непечатаемые символы, это распространенный метод кодирования сложных данных в сообщении, на сегодняшний день мы используем кодировку xml. Вам нужно знать, как кодируется сообщение, чтобы расшифровать его.
Другая проблема заключается в том, что вы пытаетесь отобразить сообщение в utf8, когда это, вероятно, не так.
Совет: вставьте сообщение в Редактор программиста и переключитесь в шестнадцатеричный режим, это может помочь.