Json文件数据转换为kafka主题

时间:2019-02-13 14:29:44

标签: apache-kafka

如何使用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"

5 个答案:

答案 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)

我也是Kafka的新手,并且拥有与您相同的用例。经过一些研发,我发现了一个简短的答案可能会对您有所帮助。您可以编写如下内容:

sed

要详细了解click here

答案 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}