多线程Kafka制作人如何工作?

时间:2017-06-16 13:00:40

标签: apache-kafka kafka-producer-api

当存在单一流数据源时,多线程Kafka Producer如何工作?让我们说我们有三个生产者线程。每个生产者如何知道数据消费将从何处开始?我们不希望每个制作人都使用相同的数据(重复)。

2 个答案:

答案 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_INITIATEDEMITTED。当生成器1和生成器2同时尝试发出event1并且由于它们都没有在缓存中看到它时,这将解决问题,两者都将被发送到流中。