【发布时间】:2018-03-05 13:28:44
【问题描述】:
我们有一个微服务,它使用 spring-boot 和 spring-cloud-stream 生成和使用来自 Kafka 的消息。
版本:
春季启动:1.5.8.RELEASE
spring-cloud-stream: Ditmars.RELEASE
卡夫卡服务器:kafka_2.11-1.0.0
编辑: 我们正在使用 3 个 Kafka 节点的 StatefulSets 集群和 3 个 Zookeeper 节点的集群在 Kubernetes 环境中工作。
我们遇到过几次旧邮件在几天前已经处理过的旧邮件被重新处理的情况。
几个注意事项:
- 在此之前打印了以下日志(还有更多类似的行,这只是一个摘要)
撤销以前为组注册服务分配的分区 []
发现协调员 dev-kafka-1.kube1.iaas.watercorp.com:9092 (id: 2147483646 rack: null)
320代成功加入群组注册服务
- 上述撤销和重新分配分区的事件每隔几个小时就会发生一次。仅在少数此类事件中,旧消息被重新使用。在大多数情况下,重新分配不会触发消息消费。
- 消息来自不同的分区。
- 每个分区有超过 1 条消息正在被重新处理。
application.yml:
春天: 云: 溪流: 卡夫卡: 粘合剂: 经纪人:卡夫卡 默认代理端口:9092 zkNodes:动物园管理员 默认ZkPort:2181 最小分区计数:2 复制因子:1 自动创建主题:真 自动添加分区:真 标头:类型,message_id 必填项:1 配置: “[security.protocol]”:PLAINTEXT #TODO:这是一种解决方法。应该是 security.protocol 绑定: 用户注册输入: 消费者: 自动重新平衡启用:真 自动提交错误:真 enableDlq: 真 用户输入: 消费者: 自动重新平衡启用:真 自动提交错误:真 enableDlq: 真 注册邮件输出: 生产商: 同步:真 配置: 重试次数:10000 注册用户输出: 生产商: 同步:真 配置: 重试次数:10000 默认: 粘合剂:卡夫卡 内容类型:应用程序/json 组:注册服务 消费者: 最大尝试次数:1 生产商: partitionKeyExtractorClass: com.watercorp.messaging.PartitionKeyExtractor 绑定: 用户注册输入: 目的地:注册用户 消费者: 并发:10 分区:真 用户输入: 目的地:用户 消费者: 并发:5 分区:真 注册邮件输出: 目的地:发送注册邮件 生产商: 分区计数:10 注册用户输出: 目的地:注册用户 生产商: 分区计数:10是否有任何我可能遗漏的配置?什么会导致这种行为?
【问题讨论】:
标签: apache-kafka spring-cloud-stream