我有一个运行主题为raw_events
的简单Kafka经纪人。
使用kafka-console-producer --topic raw_events --broker-list kafka:29092 < event.json
,我将向事件添加事件,并成功显示kafka-console-consumer --bootstrap-server kafka:29092 --topic raw_events
。因此,我知道这些事件都位于代理中(在正确的主题中),也可以从代理中消费**)。
在这种情况下,event.json
文件包含一个非常简单的JSON:
{'event_type': 'issue',
'project': 'sample',
'user': {'name': 'John Doe', 'username': 'jdoe'}
}
在KSQL中,主题在那里:
ksql> show topics;
Kafka Topic | Registered | Partitions | Partition Replicas | Consumers | ConsumerGroups
--------------------------------------------------------------------------------------------------
raw_events | true | 1 | 1 | 3 | 3
包含先前尝试的一些事件:
ksql> print 'raw_events';
Format:STRING
11/2/18 3:36:21 PM UTC , NULL , {'event_type': 'issue', 'project': 'sample', 'user': {'name': 'John Doe', 'username': 'jdoe'}}
11/2/18 3:43:05 PM UTC , NULL , {'event_type': 'issue', 'project': 'sample', 'user': {'name': 'John Doe', 'username': 'jdoe'}}
11/2/18 3:45:19 PM UTC , NULL , {'event_type': 'issue', 'project': 'sample', 'user': {'name': 'John Doe', 'username': 'jdoe'}}
11/2/18 3:45:43 PM UTC , NULL , {'event_type': 'issue', 'project': 'sample', 'user': {'name': 'John Doe', 'username': 'jdoe'}}
11/2/18 3:47:30 PM UTC , NULL , {'event_type': 'issue', 'project': 'sample', 'user': {'name': 'John Doe', 'username': 'jdoe'}}
(我正在关注https://docs.confluent.io/current/ksql/docs/developer-guide/create-a-stream.html,但有我自己的数据。)
现在,我在KSQL中创建一个成功的流:
create stream new_events (event_type varchar, project varchar) with (kafka_topic='raw_events', value_format='JSON');
流已创建:
ksql> show streams;
Stream Name | Kafka Topic | Format
----------------------------------------
NEW_EVENTS | raw_events | JSON
----------------------------------------
尽管如此(这是我的问题,可能是PEBKAC或KSQL错误),该流上的SELECT
只是停止并且不显示任何事件...即使当我继续将事件添加到主题:
ksql> select * from new_events;
[... nothing here ...]
选择诸如project
之类的特定列也不会返回条目。
**)顺便说一句,对于我来说还不清楚为什么Produce CLI命令具有参数--broker-list
,而Consumer CLI命令具有--bootstrap-server
的原因似乎也是一样。
答案 0 :(得分:0)
遵循https://www.confluent.io/blog/troubleshooting-ksql-part-1上的疑难解答提示...
虽然您会注意到*)...我发现问题是我在JSON中使用了单引号,而有效的JSON正式指定(您猜对了)引号只是双引号,"
。有人将JSON的某些内部表示形式导出为带有单引号的JSON,这使我走上了错误的轨道。
因此,我示例中的正确JSON应该是
{"event_type": "issue",
"project": "sample",
"user": {"name": "John Doe", "username": "jdoe"}}
一切都很好。
(KSQL服务器的日志中没有任何信号表明这是问题的原因。幸运的是,如果其他人遇到此问题,此处未将其记录为潜在的解决方案。)