カフカの消費者のための問題のうち支出

 問題:

再現:

生产数据先再削除の操作を追加:
//使用カフカ模拟先再削除の操作を追加
( "製品を追加"、UUID.randomUUID()toString()を新しい日付()。)メッセージメッセージ=新しいメッセージ。
kafkaTemplate.send( "製品"、JSON.toJSONString(メッセージ))。
メッセージメッセージ1 =新しいメッセージ(。UUID.randomUUID()のtoString()、 "削除製品"、新しいDate());
kafkaTemplate.send( "製品"、JSON.toJSONString(メッセージ1));

この実験のカフカに3つのノードは、そう送信patitionを選択送信データに回転三のpartationパーティション、それぞれがあります

(1)指定しpatition、直接使用されます。

(2)は、patitionのハッシュ値を介してキーをpatitionが、指定されたキーを指定しません。

(3)patitionとキー、選択ポーリングpatitionを指定されていません。

消費データ
消費者-A 

26.437:29:20は、2019年12月13日である [#0-0-C-org.springframework.kafka.KafkaListenerEndpointContainer 1] -消費データ記憶----メッセージ{ID =「e819cb58-4ac2-485e cikspring_kafka.KafkaListeners INFO 8a782c68f631--84dc 'MSG =' 追加製品」、SENDTIME金で12月13日は= 2019年夜08時29分25秒CSTです}

2019年12月13日20:29:26.437 ---->製品を追加

消費者-A1

26.384:29:20は、2019年12月13日である [#0-9-C-org.springframework.kafka.KafkaListenerEndpointContainer 1] -消費データ記憶----メッセージ{ID =「bc895e02- cikspring_kafka.KafkaListeners INFO ce52-46a4 259d40c16b82--86de 'MSG =' 削除商品」、SENDTIME金で12月13日午後08時29分26秒は= 2019 CSTです}

2019年12月13日20:29:26.384 ----->削除製品

消費者が削除して追加したことを発見、データベースは汚いが登場しました!

理由:

パーティションへの生産ポーリング送信データを、消費者がランダムにサブスクリプションのメッセージ(パーティションまたはパーティションを過ごす2人の消費者支出消費者があるかもしれません)されている、ランダムな送信データが必然的に多くの消費者支出のデータにつながる、消費者の混乱が発生します問題

ソリューション:

生产者生产数据,指定partation,则kafka消费机制则要求同组只有一个消费者消费数据,

生产数据:

//使用kafka模拟 先add  再delete操作
Message message = new Message(UUID.randomUUID().toString(), "add product", new Date());
//public ListenableFuture<SendResult<K, V>> send(String topic, int partition, V data)
kafkaTemplate.send("product",1, JSON.toJSONString(message));
Message message1 = new Message(UUID.randomUUID().toString(), "delete product", new Date());
//public ListenableFuture<SendResult<K, V>> send(String topic, int partition, V data)
kafkaTemplate.send("product", 1,JSON.toJSONString(message1));

另外当我指定指定partation=3时,就出现如下错误,因为集群kafka集群是三个节点的,partation是 0/1/2,没有3,所以报错

kafkaTemplate.send("product",3, JSON.toJSONString(message));

2019-12-14 10:44:27.687 [http-nio-8080-exec-1] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.kafka.common.KafkaException: Invalid partition given with record: 3 is not in the range [0...3).] with root cause
org.apache.kafka.common.KafkaException: Invalid partition given with record: 3 is not in the range [0...3).

消费数据:

2019-12-13 20:39:06.784 [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO  c.i.k.spring_kafka.KafkaListeners - 消费数据入库----Message{id='9aec3a47-dc5a-40de-ba93-2a60a1865d4c', msg='add product', sendTime=Fri Dec 13 20:39:06 CST 2019}
2019-12-13 20:39:06.784 [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO  c.i.k.spring_kafka.KafkaListeners - 消费数据入库----Message{id='bd918926-9981-4cba-b7c8-3a220a0219de', msg='delete product', sendTime=Fri Dec 13 20:39:06 CST 2019}

 

2019-12-13 20:39:22.702 [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO  c.i.k.spring_kafka.KafkaListeners - 消费数据入库----Message{id='3aac99d7-ce91-49ce-ab7e-80484c6702b7', msg='add product', sendTime=Fri Dec 13 20:39:22 CST 2019}
2019-12-13 20:39:22.702 [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO  c.i.k.spring_kafka.KafkaListeners - 消费数据入库----Message{id='cf44778d-31e2-4b73-a7a3-69b42a7581b8', msg='delete product', sendTime=Fri Dec 13 20:39:22 CST 2019}

 

2019-12-13 20:39:24.050 [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO  c.i.k.spring_kafka.KafkaListeners - 消费数据入库----Message{id='26705470-b9ad-46a4-8c10-754d9761537d', msg='add product', sendTime=Fri Dec 13 20:39:24 CST 2019}
2019-12-13 20:39:24.050 [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO  c.i.k.spring_kafka.KafkaListeners - 消费数据入库----Message{id='7369b9c8-cbed-416f-bbc3-73b814cc7c39', msg='delete product', sendTime=Fri Dec 13 20:39:24 CST 2019}
 

1)多次测试后始终发现路由到Consumer-A1消费数据,则解决消费时序问题

2)当手动结束Consumer-A1所在进程,生产者重新生产数据,则又路由到Consumer-A消费到了数据

发布了135 篇原创文章 · 获赞 16 · 访问量 9万+

おすすめ

転載: blog.csdn.net/nmjhehe/article/details/103533016