【问题标题】:Kafka streams on spring, trouble with exactly once ACL: TransactionalIdAuthorizationExceptionKafka 在春季流式传输,恰好一次 ACL 出现问题:TransactionalIdAuthorizationException
【发布时间】:2020-06-28 08:06:44
【问题描述】:

我无法从 springboot kafka-streams 应用程序连接到 Confluent 云上的主题,连接失败并出现一条错误行 org.apache.kafka.common.errors.TransactionalIdAuthorizationException: Transactional Id authorization failed.

我相信这是因为主题配置为允许具有指定事务 ID (https://docs.confluent.io/current/kafka/authorization.html#enabling-authorization-for-idempotent-and-transactional-apis) 的事务。我的服务是一个流应用程序,在每个 StreamThread 中生成一个事务 ID(在 https://github.com/apache/kafka/blob/2.4.1/streams/src/main/java/org/apache/kafka/streams/processor/internals/StreamThread.java 中创建生产者方法),定义为 applicationId + "-" + taskId,这与主题 ACL 中定义的不匹配。

这是否正确,如果正确,是否有解决方法?

【问题讨论】:

  • 你添加spring-kafka标签是有什么原因吗? Spring 只是使用底层的 kafka-clients 和 kafka-streams 库,所以这是它无法控制的。
  • 注意,编辑删除标签。

标签: apache-kafka apache-kafka-streams confluent-platform


【解决方案1】:

您需要使用通配符 ACL,只需指定前缀,即 <application.id>- 对应的 ACL,使用 --resource-pattern-type prefixed

参照。 https://docs.confluent.io/current/streams/developer-guide/security.html

【讨论】:

  • 感谢@matthias-j-sax 的回答。那么流式客户端不支持显式事务 ID 前缀?事务前缀必须始终是它的应用程序 ID,或者我错过了什么?
  • 正确:transaction.id 用户无法配置,但 Kafka Streams 使用 application.id 作为前缀自动配置。
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 2017-01-14
  • 2018-11-28
  • 1970-01-01
  • 2016-03-24
  • 2020-10-04
  • 2019-05-19
  • 1970-01-01
相关资源
最近更新 更多