Kafka 为用户将消息存储在单个分区上?
Kafka to store the message on single partition for a user?
我有一个类似电子商务的系统,它会产生不同类型的用户事件。
我需要将它们存储在kafka中进行异步数据分析。我希望特定用户的事件进入一个队列分区,以便消费者获得所有消息
在一个分区上。这不会是用户的专用队列。这意味着单个分区可以存储多个客户的数据。不确定如何
我可以在 kafka 中实现它吗?
要将特定用户的消息发送到同一个分区,可以使用producer的send方法的key=
参数。您可以将此参数设置为必须唯一的字节编码值。
例如,在 Python:
producer.send("topic", json.dumps(msg).encode()), key=str(user_id).encode())
这将确保有关给定用户的消息将被推送到同一主题的分区中。
@zebra8844 回答正确。相同的密钥将始终进入相同的分区除非您将来增加分区的数量,否则情况不会如此。因此,请记住这一点以备将来使用。
我有一个类似电子商务的系统,它会产生不同类型的用户事件。
我需要将它们存储在kafka中进行异步数据分析。我希望特定用户的事件进入一个队列分区,以便消费者获得所有消息 在一个分区上。这不会是用户的专用队列。这意味着单个分区可以存储多个客户的数据。不确定如何 我可以在 kafka 中实现它吗?
要将特定用户的消息发送到同一个分区,可以使用producer的send方法的key=
参数。您可以将此参数设置为必须唯一的字节编码值。
例如,在 Python:
producer.send("topic", json.dumps(msg).encode()), key=str(user_id).encode())
这将确保有关给定用户的消息将被推送到同一主题的分区中。
@zebra8844 回答正确。相同的密钥将始终进入相同的分区除非您将来增加分区的数量,否则情况不会如此。因此,请记住这一点以备将来使用。