Kafka consumer error: failed to deserialize – the unknown protocol id
Question:
I am running Kafka locally, and sending a "hello, world!" message using the kafka-console-producer.sh using the following command:
kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
> hello, world!
I have a Kafka consumer running using the Quix Streams library. The code for the consumer is
import quixstreams as qx
import pandas as pd
client = qx.KafkaStreamingClient('127.0.0.1:9092')
topic_consumer = client.get_topic_consumer("quickstart-events", consumer_group=None)
def on_stream_received_handler(stream_received: qx.StreamConsumer):
stream_received.timeseries.on_dataframe_received = on_dataframe_received_handler
def on_dataframe_received_handler(stream: qx.StreamConsumer, df: pd.DataFrame):
print(df.to_string())
topic_consumer.on_stream_received = on_stream_received_handler
print("Listening to streams. Press CTRL-C to exit.")
qx.App.run()
When I send the "hello, world" message to Kafka, I get the following error from the Kafka consumer:
[23-03-13 16:00:43.516 (4) ERR] Exception while processing package
System.Runtime.Serialization.SerializationException: Failed to deserialize - the unknown protocol id '104'
at QuixStreams.Transport.Fw.Helpers.TransportPackageValueCodec.Deserialize(Byte[]) + 0x135 at QuixStreams.Transport.Fw.DeserializingModifier.Publish(Package, CancellationToken) + 0x1b0 at QuixStreams.Transport.TransportConsumer.<>c__DisplayClass5_2.<.ctor>b__8(Package p) + 0x54
at QuixStreams.Transport.Fw.ByteMergingModifier.<Publish>d__13.MoveNext() + 0x531
--- End of stack trace from previous location --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x32 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0xe9
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x7b
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task) + 0x2b at System.Runtime.CompilerServices.TaskAwaiter.GetResult() + 0x1a at QuixStreams.Transport.Kafka.KafkaConsumer.<AddMessage>d__66.MoveNext() + 0x333
Answers:
From Quix Docs, it says "Quix Streams serializes and deserializes time-series data using different codecs and optimizations to minimize payloads in order to increase throughput and reduce latency.", so most probably it is not accepting plain text data, have you tried sending data from Quix producer to validate this assumption.
I am running Kafka locally, and sending a "hello, world!" message using the kafka-console-producer.sh using the following command:
kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
> hello, world!
I have a Kafka consumer running using the Quix Streams library. The code for the consumer is
import quixstreams as qx
import pandas as pd
client = qx.KafkaStreamingClient('127.0.0.1:9092')
topic_consumer = client.get_topic_consumer("quickstart-events", consumer_group=None)
def on_stream_received_handler(stream_received: qx.StreamConsumer):
stream_received.timeseries.on_dataframe_received = on_dataframe_received_handler
def on_dataframe_received_handler(stream: qx.StreamConsumer, df: pd.DataFrame):
print(df.to_string())
topic_consumer.on_stream_received = on_stream_received_handler
print("Listening to streams. Press CTRL-C to exit.")
qx.App.run()
When I send the "hello, world" message to Kafka, I get the following error from the Kafka consumer:
[23-03-13 16:00:43.516 (4) ERR] Exception while processing package
System.Runtime.Serialization.SerializationException: Failed to deserialize - the unknown protocol id '104'
at QuixStreams.Transport.Fw.Helpers.TransportPackageValueCodec.Deserialize(Byte[]) + 0x135 at QuixStreams.Transport.Fw.DeserializingModifier.Publish(Package, CancellationToken) + 0x1b0 at QuixStreams.Transport.TransportConsumer.<>c__DisplayClass5_2.<.ctor>b__8(Package p) + 0x54
at QuixStreams.Transport.Fw.ByteMergingModifier.<Publish>d__13.MoveNext() + 0x531
--- End of stack trace from previous location --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x32 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0xe9
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x7b
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task) + 0x2b at System.Runtime.CompilerServices.TaskAwaiter.GetResult() + 0x1a at QuixStreams.Transport.Kafka.KafkaConsumer.<AddMessage>d__66.MoveNext() + 0x333
From Quix Docs, it says "Quix Streams serializes and deserializes time-series data using different codecs and optimizations to minimize payloads in order to increase throughput and reduce latency.", so most probably it is not accepting plain text data, have you tried sending data from Quix producer to validate this assumption.