对于Kafka主题,我可以使用融合的消费者api订阅和接收消息。对于Kafka Ktables,我可以使用REST API和http客户端进行订阅。所以我的问题是,也许可以不通过rest api而是通过合用的消费者api来订阅Kafka表吗?
这就是我订阅主题的方式:
using (var consumer = new ConsumerBuilder<Ignore, string>(conf).Build())
{
try
{
consumer.Subscribe(this.TopicLookup);
while (true)
{
try
{
var cr = consumer.Consume(cts.Token);
Console.WriteLine($"Consumed message '{cr.Value}' at: '{cr.TopicPartitionOffset}'.");
}
catch (ConsumeException e)
{
Console.WriteLine($"Error occured: {e.Error.Reason}");
}
}
}
catch (OperationCanceledException)
{
consumer.Close();
}
}
这就是我查询KSQL的方式:
using (var client = new HttpClient())
{
client.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Method = HttpMethod.Post;
request.Content = new System.Net.Http.StringContent("{ \"ksql\": \"select * from userstream7table;\",\"streamsProperties\": { \"ksql.streams.auto.offset.reset\": \"earliest\"}}", Encoding.UTF8, "application/vnd.ksql.v1+json");
//request.Content.Headers.Add("Accept", "application/vnd.ksql.v1+json");
using (var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead))
{
using (var body = await response.Content.ReadAsStreamAsync())
using (var reader = new StreamReader(body))
while (!reader.EndOfStream)
Console.WriteLine(reader.ReadLine());
}
}
当我创建带有REST / Ksql主题的Ktable时,也会被创建。如果我尝试订阅它,则不会收到任何消息。如果我使用RESP API查询此Ktable,则会收到所有消息。也许不可能以标准方式使用这些主题?
答案 0 :(得分:0)
该表的主题仅是一个Kafka主题,与其他主题一样。您可以随意使用这些数据,包括使用消费者api。
您可能会遇到错误的原因很可能是您未设置正确的使用者配置。最可能的罪魁祸首是:
auto.offset.reset
设置为earliest
。<Ignore, string>
构建消费者,即忽略键和字符串值。但是值中的数据是字符串吗?这取决于您的value_format。