Python JSON列作为kafka producer中的键

Python JSON列作为kafka producer中的键,python,apache-kafka,kafka-producer-api,confluent-platform,Python,Apache Kafka,Kafka Producer Api,Confluent Platform,正如我们所知,我们可以使用kafka producer发送一个密钥,该密钥在内部进行散列,以找到主题数据中的哪个分区。 我有一个生产者,在那里我以JSON格式发送数据 kafka-console-producer --broker-list 127.0.0.1:9092 --topic USERPROFILE << EOF {"user_id" : 100, "firstname":"Punit","lastname":"Gupta", "countrycode":"IN", "r

正如我们所知,我们可以使用kafka producer发送一个密钥,该密钥在内部进行散列,以找到主题数据中的哪个分区。 我有一个生产者,在那里我以JSON格式发送数据

kafka-console-producer --broker-list 127.0.0.1:9092 --topic USERPROFILE << EOF 
{"user_id" : 100, "firstname":"Punit","lastname":"Gupta", "countrycode":"IN", "rating":4.9 }
{"user_id" : 101, "firstname":"eli","lastname":"eli", "countrycode":"GB", "rating":3.0 }
EOF
但是在发送JSON sata时如何执行


我正在使用confluent针对Kafka的python API。如果有什么东西需要我根据函数的类别来编写,我将非常感激,如果你能用python来描述的话。

JSON只是一个字符串。控制台生产者不解析JSON,只有Avro控制台生产者解析JSON

我会避免使用
key.separator=:
,因为JSON包含
。您可以使用
|
字符,然后只需键入即可

countrycode|{"your":"data"}
在Python中。您可以像这样解析数据,以便提取键的值

key = 'countrycode'
records = [{"user_id" : 100, "firstname":"Punit","lastname":"Gupta", key:"IN", "rating":4.9 },
           {"user_id" : 101, "firstname":"eli","lastname":"eli", key:"GB", "rating":3.0 }
]

import json
for r in records:
    producer.produce('topic', key=r[key], value=json.dumps(r))
    # first record will send a record containing ('IN', {  ... 'countrycode':'IN'})

你能给我一个例子,从我的生产者上面。你需要复制数据从价值到关键。在控制台生成器中生成JSON时,如果没有一些额外的bash函数,您无法解析JSON,但如果我使用cpu生成数据,这将使kafka的整个用途无效,对吗?我不确定我是否理解这个问题。。。无论发生什么,您都在使用CPU。您的生产者不应该与代理运行在同一台机器上,因此CPU在真实场景中会有所不同。。。我还是不确定我是否明白你的意思。但是如果您想使用它,那么您可以生成一个没有键的主题,然后在将数据写入连接接收器之前使用Connect将字段提取到键。
key = 'countrycode'
records = [{"user_id" : 100, "firstname":"Punit","lastname":"Gupta", key:"IN", "rating":4.9 },
           {"user_id" : 101, "firstname":"eli","lastname":"eli", key:"GB", "rating":3.0 }
]

import json
for r in records:
    producer.produce('topic', key=r[key], value=json.dumps(r))
    # first record will send a record containing ('IN', {  ... 'countrycode':'IN'})