新版本的消息队列 Kafka 版的消息有以下两个字段:

  • Key:消息的标识。

  • Value:消息内容。

为了便于追踪,请为消息设置一个唯一的 Key。您可以通过 Key 追踪某消息,打印发送日志和消费日志,了解该消息的发送和消费情况。

如果消息发送量较大,建议不要设置 Key,并使用黏性分区策略等。

失败重试

分布式环境下,由于网络等原因偶尔发送失败是常见的。导致这种失败的原因可能是消息已经发送成功,但是 ACK 失败,也有可能是确实没发送成功。

消息队列 Kafka 是 VIP 网络架构,30 秒没有活动就会主动断开空闲连接,因此,不是一直活跃的客户端会经常收到 connection reset by peer 错误,建议重试消息发送。

您可以根据业务需求,设置以下重试参数:

  • retries:重试次数,建议设置为 3。

  • retry.backoff.ms,重试间隔,建议设置为 1000。

异步发送

发送接口是异步的,如果您想接收发送的结果,可以调用 metadataFuture.get(timeout, TimeUnit.MILLISECONDS)。

线程安全

Producer 是线程安全的,且可以往任何 Topic 发送消息。通常情况下,一个应用对应一个 Producer。

Acks

Acks 的说明如下:

  • acks=0:无需服务端的 Response、性能较高、丢数据风险较大。

  • acks=1:服务端主节点写成功即返回Response、性能中等、丢数据风险中等、主节点宕机可能导致数据丢失。

  • acks=all:服务端主节点写成功且备节点同步成功才返回 Response、性能较差、数据较为安全、主节点和备节点都宕机才会导致数据丢失。

建议选择 acks=1,重要的服务可以设置 acks=all。