当存在单一流数据源时,多线程Kafka Producer如何工作?让我们说我们有三个生产者线程。每个生产者如何知道数据消费将从何处开始?我们不希望每个制作人都使用相同的数据(重复)。
答案 0 :(得分:1)
在我看来,不是卡夫卡问题,而是在使用生产者向Kafka发送邮件之前如何同步客户端(作为API的接收者)。
答案 1 :(得分:0)
当您拥有单一来源时,多线程Kafka Producer的工作原理 流数据?
您可能希望使用某种中间状态来跟踪成功存储在kafkastream中的事件的主键。
将其视为关系数据库,当您尝试使用相同的主键编写多个记录时,数据库将抛出DuplicateKeyException
。
与kafka流相同,选择事件中的一些独特属性作为主键,并将它们存储在某种缓存中(如果所有生成器都在同一台机器/同一个应用程序中,则只需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
并且由于它们都没有在缓存中看到它时,这将解决问题,两者都将被发送到流中。