如何使用kafka-console-producer将json文件数据插入kafka主题? 每个json数据集都可以存储为消息吗?
示例-
{
"id": 1,
"first_name": "John",
"last_name": "Lindt",
"email": "jlindt@gmail.com",
"gender": "Male",
"ip_address": "1.2.3.4"
}
如果使用此命令-
cat sampledata.json|kafka-console-producer --broker-list localhost:9092 --topic stream-test-topic
每行都作为单独的消息。
正确的方法是什么?
谢谢!
ps-
Elastic搜索正在读取该主题。 样本json消息文件-
[{
"id": 1,
"first_name": "John",
"last_name": "Lindt",
"email": "jlindt@gmail.com",
"gender": "Male",
"ip_address": "1.2.3.4"
}, {
"id": 2,
"first_name": "Peter",
"last_name": "Friz",
"email": "Friz3@gmail.com",
"gender": "Male",
"ip_address": "4.5.6.7"
}, {
"id": 3,
"first_name": "Dell",
"last_name": "Chang",
"email": "Dellc@gmail.com",
"gender": "Female",
"ip_address": "8.9.10.11"
}, {
"id": 4,
"first_name": "Lolita",
"last_name": "John",
"email": "LolitaJ@gmail.com",
"gender": "Female",
"ip_address": "12.13.14.15"
}, {
"id": 5,
"first_name": "Pele",
"last_name": "Wang",
"email": "Pele@gmail.com",
"gender": "Male",
"ip_address": "16.17.18.19"
}, {
"id": 6,
"first_name": "Rene",
"last_name": "Charm",
"email": "Rene3@gmail.com",
"gender": "Male",
"ip_address": "20.21.22.23"
答案 0 :(得分:1)
从Kafka的角度来看,每个消息都是字节数组。 如何对待它取决于客户的应用程序(生产者,消费者等)。 Kafka Producer,Consumer使用Deserializer,Serializer在业务对象(字符串,POJO)之间来回转换字节数组。
您所面对的问题是Kafka Console生产者从标准输入中读取消息的方式。
默认情况下,它使用LineMessageReader
,它将每行视为新消息。您可以实现自己的实现,也可以在发送之前将json中的每个换行符转换为其他空白。
例如,您可以使用以下命令:
jq -rc . sampledata.json | kafka-console-producer --broker-list localhost:9092 --topic stream-test-topic
答案 1 :(得分:1)
答案 2 :(得分:0)
如果文件中包含JSON消息,则可以使用以下方式在kafka主题中编写:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic user-timeline < samplerecords.json
Kafka生产者使用默认的LineMessageReader
逐行读取消息。默认键和值序列化器为StringSerializer
。它不会验证是否存在正确的json,而是将其视为发布给kafka主题的原始字符串对象。但是,如果要验证,可以在console-producer命令中定义以下配置。
key.serializer
value.serializer
示例:
kafka-console-producer --broker-list localhost:9092 --topic testTopic--property value.serializer=custom.class.serialization.JsonSerializer
在消费者方面,您可以执行类似的方法。使用JsonDeserializer读取数据。
答案 3 :(得分:0)
您可以将Json传递给主题:
echo '{"test": 1}' | bin/kafka-console-producer --broker-list localhost:9092 --topic test-topic
答案 4 :(得分:0)
这个答案对于那些正在寻找 kafka 控制台生产者发送其键和值为 json 的 json 数据的人有帮助。
命令
./bin/kafka-console-producer.sh --broker-list localhost:9092 --property parse.key=true --property key.separator="&" --topic test-topic
JSON
{"key":"1"}&{"name":"emp1","sent_at":1625519962875}