kafka 生产者

生产者

生产者负责创建消息,然后将其投递到Kafka中。

负载均衡

  1. 轮询策略。
  2. 随机策略。
  3. 按照 key 进行hash。

Kafka 的默认分区策略:如果指定了 key,key 相同的消息会发送到同一个分区(分区有序);如果没有指定 key,则使用轮询策略。

发送消息

acks指定了生产者在多少个分区副本收到消息的情况下才会认为消息写入成功。

三种方式并没有优劣之分,而是要因地制宜的选择合适的策略。需要在性能和可靠性之间权衡。

发送消息有以下3种方式:

发送并忘记。

acks = 0。

生产者发送消息之后不会等待任何来自broker的响应。大多数情况下,消息可以成功送达,因为Kafka是高可用的,而且生产者有自动尝试重发的机制。但是,如果发生了不可重试的错误或超时,那么消息将会丢失,应用程序将不会收到任何信息或异常。

在其他配置环境相同的情况下,acks 设置为0 可以达到最大的吞吐量。

异步发送

acks=1,默认值。

生产者发送消息之后,只要分区的leader副本成功写入消息,那么它就会收到来自服务端的成功响应。

  • 如果消息无法写入leader副本,比如在leader 副本崩溃、重新选举新的 leader 副本的过程中,那么生产者就会收到一个错误的响应,为了避免消息丢失,生产者可以选择重发消息。
  • 如果消息写入leader副本并返回成功响应给生产者,且在被其他follower副本拉取之前leader副本崩溃,那么此时消息还是会丢失,因为新选举的leader副本中并没有这条对应的消息。
    acks设置为1,是消息可靠性和吞吐量之间的折中方案。
同步发送

acks = -1 或 acks = all。

生产者在消息发送之后,需要等待ISR中的所有副本都成功写入消息之后才能够收到来自服务端的成功响应。

在其他配置环境相同的情况下,acks 设置为-1(all)可以达到最强的可靠性。但这并不意味着消息就一定可靠,因为ISR中可能只有leader副本,这样就退化成了acks=1的情况。

相关推荐
金海境科技12 分钟前
【服务器数据恢复】H3C华三Ceph分布式存储文件丢失数据恢复案例
服务器·经验分享·分布式·ceph
赫尔·普莱蒂科萨·帕塔12 分钟前
Kurator 分布式云原生环境技术深度分析与实践指南
分布式·云原生
永亮同学16 分钟前
【探索实战】从“工具堆叠”到“平台治理”:基于 Kurator 构建统一分布式云原生管理底座的实践与思考
分布式·云原生
一起养小猫18 分钟前
【探索实战】Kurator云边协同实践:基于KubeEdge的分布式物联网平台构建
分布式·物联网·struts
Wang's Blog21 分钟前
RabbitMQ: 基于Docker技术实施集群部署实战指南
分布式·docker·rabbitmq
gordon~938 分钟前
RabbitMQ -消息可靠 的实战示例
分布式·消息队列·rabbitmq·消息可靠性
Wang's Blog39 分钟前
RabbitMQ:高效消息处理与资源管理实践
分布式·rabbitmq
Mr.朱鹏13 小时前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
脸大是真的好~15 小时前
分布式锁-基于redis实现分布式锁(不推荐)- 改进利用LUA脚本(不推荐)前面都是原理 - Redisson分布式锁
redis·分布式·lua
liuniansilence16 小时前
🚀 高并发场景下的救星:BullMQ如何实现智能流量削峰填谷
前端·分布式·消息队列