Kafka 是目前非常主流的一款 MQ 产品,很多开发人员都使用过,实际场景中经常被用来做系统解耦、消息补偿、日志收集等。如果从零开始写一个生产者、消费者该怎么写呢?安哥写了个 Demo,先不管原理机制,跑通再说。
以下内容主要分为两大块:
1. producer 样例及主要参数详解2. consumer 样例及主要参数详解
spring 提供了 kafka producer 和 consumer 工具,我们可以很方便的实现生产者和消费者。以下是 maven 依赖,注意 spring-kafka 版本一定要和 kafka-clients 版本兼容,不然可能会出现消费不到消息的情况。
org.springframework.boot spring-boot-starter-web 2.1.0.RELEASEorg.springframework.kafka spring-kafka 2.2.0.RELEASEorg.apache.kafka kafka-clients 2.2.0
01. Producer
我们可以通过 spring kafkaTemplate 向 Kafka server 发送消息,发送参数除了 data 之外还有 topic、partition、key 等,非特殊需求我们只需要关注 topic。
partition :指定往哪个分区发送。同一个partition的消息会顺序消费key:key 的 hash 值会作为 partition,并且此值会传递到 Consumer一般顺序消费场景需要设置 key,例如订单号为 key
如果partition、key 都没有设置,则采用轮询的方式向 partition 发送消息。
由于 producer 是异步发送消息的,我们不能立刻知道发送结果,spring kafka 提供了 SuccessCallback、FailureCallback 两个接口分别处理成功回调和失败回调。