多线程 Kafka 生产者如何工作?
How multi-threaded Kafka producer work?
当只有一个流数据源时,多线程 Kafka Producer 将如何工作?假设我们有三个生产者线程。每个生产者如何知道数据消费将从哪里开始?我们不希望每个生产者都使用相同的数据(重复)。
在我看来,这不是 Kafka 的问题,而是在使用生产者向 Kafka 发送消息之前如何同步客户端(作为 API 的接收者)。
How multi threaded Kafka Producer will work when u have single source
of streaming data?
您可能希望使用某种中间状态来跟踪成功存储在 kafkastream 中的事件的主键。
将其想象成关系数据库,当您尝试使用相同的主键写入多个记录时,数据库会抛出 DuplicateKeyException
。
与 kafka 流相同,在您的事件中选择一些独特的属性作为主键,并将它们存储在某种缓存中(如果所有生产者都在同一个 machine/same 应用程序中,则简单地使用 hashmap,但分布式缓存如Redis、Memcached(如果你的生产者分布在不同的机器上)
因此,如果事件在缓存中已处于 EMITTED
状态,则流程将删除该事件。
| emitted events |
Producer1---event1, event10 ---| e1 - EMITTED |
| e10 - EMITTED | eventstream
| |--------------------
Producer2---event1, event2-----| e2 - EMITTED | e1, e10, e2, e3
(ignores e1) | |
| |--------------------
Producer3---event1, event3-----| e3 - EMITTED |
(ignores e1) | |
一旦 kafkastream 确认持久性,您可能还想跟踪事件的两种状态,EMIT_INITIATED
和 EMITTED
。这将解决当生产者 1 和生产者 2 都尝试同时发出 event1
并且由于其中 none 在缓存中看到它,它们都将被发射到流中的问题。
当只有一个流数据源时,多线程 Kafka Producer 将如何工作?假设我们有三个生产者线程。每个生产者如何知道数据消费将从哪里开始?我们不希望每个生产者都使用相同的数据(重复)。
在我看来,这不是 Kafka 的问题,而是在使用生产者向 Kafka 发送消息之前如何同步客户端(作为 API 的接收者)。
How multi threaded Kafka Producer will work when u have single source of streaming data?
您可能希望使用某种中间状态来跟踪成功存储在 kafkastream 中的事件的主键。
将其想象成关系数据库,当您尝试使用相同的主键写入多个记录时,数据库会抛出 DuplicateKeyException
。
与 kafka 流相同,在您的事件中选择一些独特的属性作为主键,并将它们存储在某种缓存中(如果所有生产者都在同一个 machine/same 应用程序中,则简单地使用 hashmap,但分布式缓存如Redis、Memcached(如果你的生产者分布在不同的机器上)
因此,如果事件在缓存中已处于 EMITTED
状态,则流程将删除该事件。
| emitted events |
Producer1---event1, event10 ---| e1 - EMITTED |
| e10 - EMITTED | eventstream
| |--------------------
Producer2---event1, event2-----| e2 - EMITTED | e1, e10, e2, e3
(ignores e1) | |
| |--------------------
Producer3---event1, event3-----| e3 - EMITTED |
(ignores e1) | |
一旦 kafkastream 确认持久性,您可能还想跟踪事件的两种状态,EMIT_INITIATED
和 EMITTED
。这将解决当生产者 1 和生产者 2 都尝试同时发出 event1
并且由于其中 none 在缓存中看到它,它们都将被发射到流中的问题。