Amazon MSK 默认配置和交易发布问题

问题描述 投票:0回答:1

最近,我们开始对 Kafka 连接器与 MSK(亚马逊的托管 Kafka 服务)进行一些测试。发布记录似乎工作正常,但在启用事务时则不然。

我们的集群由 2 个代理组成(因为我们有 2 个区域),使用默认的 MSK 配置。我们正在使用以下属性创建 Java Kafka 生产者:

bootstrap.servers=x.us-east-1.amazonaws.com:9094,y.us-east-1.amazonaws.com:9094 client.id=kafkautil max.block.ms=5000 request.timeout.ms=5000 security.protocol=SSL transactional.id=transactions
但是,当生产者以启用事务的 

transactional.id

 设置启动时,
initTransactions()
 方法会挂起:

producer = new KafkaProducer<Object, Object>(kafkaProperties); if (kafkaProperties.containsKey(ProducerConfig.TRANSACTIONAL_ID_CONFIG)) { // this hangs producer.initTransactions(); }
查看日志输出,我们看到以下流,并且似乎从未超时。

TransactionManager - Enqueuing transactional request (type=FindCoordinatorRequest, coordinatorKey=y, coordinatorType=TRANSACTION) TransactionManager - Request (type=FindCoordinatorRequest, coordinatorKey=y, coordinatorType=TRANSACTION) dequeued for sending NetworkClient - Found least loaded node z:9094 (id: -2 rack: null) connected with no in-flight requests Sender - Sending transactional request (type=FindCoordinatorRequest, coordinatorKey=y, coordinatorType=TRANSACTION) to node z (id: -2 rack: null) NetworkClient - Sending FIND_COORDINATOR {coordinator_key=y,coordinator_type=1} with correlation id 424 to node -2 NetworkClient - Completed receive from node -2 for FIND_COORDINATOR with correlation id 424, received {throttle_time_ms=0,error_code=15,error_message=null, coordinator={node_id=-1,host=,port=-1}} TransactionManager LogContext.java:129 - Received transactional response FindCoordinatorResponse(throttleTimeMs=0, errorMessage='null', error=COORDINATOR_NOT_AVAILABLE, node=:-1 (id: -1 rack: null)) for request (type=FindCoordinatorRequest, coordinatorKey=xxx, coordinatorType=TRANSACTION)
据我所知,经纪人

is可用并且bootstrap.servers

属性中的每个主机都可用。如果我连接到它们中的每一个并在没有事务的情况下发布,那么它就可以工作。

知道我们缺少什么吗?

apache-kafka transactions aws-msk
1个回答
8
投票
但是,当生产者使用启用事务的 transactional.id 设置启动时, initTransactions() 方法会挂起:

这原来是默认 AWS MSK 属性和代理数量的问题。如果您创建的Kafka集群少于3个broker,则需要调整以下设置。

以下设置(我认为)应该设置为经纪人的数量:

财产Kafka AWS 应该描述默认.复制因子132自动创建主题的默认复制因子。min.insync.replicas122必须确认写入才能被视为成功的最小副本数偏移量.主题。332共享主题偏移量的内部主题。交易.状态.日志。 332交易主题的复制因子。
默认
默认

复制.因子
复制因子
这是关于代理属性的

Kafka 文档

因为我们有 2 个经纪人,所以我们最终得到:

default.replication.factor=2 min.insync.replicas=2 offsets.topic.replication.factor=2 transaction.state.log.replication.factor=2
这似乎解决了问题。恕我直言,这是 AWS MSK 和默认配置的一个真正问题。他们需要自动生成默认配置并根据集群中代理的数量进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.