Kafka Key 和 Value
新版本的消息队列 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。