Apache kafka Kafka流拓扑将记录插入DynamoDB模型-消耗率低

Apache kafka Kafka流拓扑将记录插入DynamoDB模型-消耗率低,apache-kafka,amazon-dynamodb,apache-kafka-streams,Apache Kafka,Amazon Dynamodb,Apache Kafka Streams,这个问题已经困扰了我好几天了&我来这里寻求帮助,找出根本原因。让我详细说明整个问题 问题陈述 我有一个KafkaStreams拓扑,它从kafka主题中读取JSON字符串。有一个处理器使用AmazonDynamoDBAsyncClient将这些消息和插入到DynamoDB中。这和拓扑结构差不多 更多详细信息 源kafka主题有200个分区。Kafka Streams拓扑当前配置了50个流线程(我们之前设置了10,20,301002 00作为没有运气的值) 面临的问题 我们正在可视化卡夫卡主题中的

这个问题已经困扰了我好几天了&我来这里寻求帮助,找出根本原因。让我详细说明整个问题

问题陈述

我有一个KafkaStreams拓扑,它从kafka主题中读取JSON字符串。有一个处理器使用AmazonDynamoDBAsyncClient将这些消息和插入到DynamoDB中。这和拓扑结构差不多

更多详细信息

源kafka主题有200个分区。Kafka Streams拓扑当前配置了50个流线程(我们之前设置了10,20,301002 00作为没有运气的值)

面临的问题

我们正在可视化卡夫卡主题中的滞后以及Grafana仪表板中的消费率(每分钟)。我们看到的是,在Streams进程启动后,在大约5到6分钟内,每分钟有300K到500K条消息的稳定消耗率。之后,速率急剧下降,并保持在每分钟63K的固定值。它不会上升或下降&修正为每分钟63K条消息

配置的参数

  • 投票-10000(10秒)
  • 最大投票记录数-10000
  • 最大分区获取字节数-50 MB
  • 提交时间-15000(15秒)
  • kafka.consumer.heartbeat.interval-60秒
  • session.timeout.ms-180000(3分钟)
  • partition.assignment.strategy-org.apache.kafka.clients.consumer.RoundRobinAssignor
  • AmazonAsyncClient连接池大小-200(与主题分区的数量相匹配)

    DynamoDB型号

    我们甚至在相应的DynamoDB表上看到了度量&我们看到了10或15秒的节流,之后自动校准开始了。我们在Cloudwatch上未发现容量问题/错误

    请让我知道您需要更多的细节,或者如果问题陈述不清楚。谢谢你的帮助

    线程转储


    我们查了线索。我们只看到200个消费者线程处于“等待”状态以进行轮询&在阻塞状态下没有线程。

    一般来说,Kafka Streams不适用于外部系统。这就是卡夫卡连接for@OneCricketeer-同意。。如果我没有错的话,如果要跨多个代理节点使用它,则会涉及到许可成本。。我同意,这是最好的方法,但所做的也没有错。Kafka Connect是开源的,没有许可证。我不确定是否存在现有的Dynamo接收器连接器,但我的观点是,您可以在连接任务中使用该AsyncClient,而不是嵌入Streams JobThank@OneCricketeer。我在每一个合流连接器页面(DynamoDB连接器等)中都能看到这种说法。许可证您可以在没有许可证密钥的情况下使用此连接器30天试用期。30天后,此连接器在Confluent enterprise许可证下可用。Confluent向订阅者颁发Confluent企业许可证密钥,并为Confluent平台和连接器提供企业级支持。如果您是订户,请通过以下地址与Confluent支持部门联系:support@confluent.io了解更多信息。有关许可证属性,请参阅Confluent Platform许可证。确定。。。但这并不妨碍您编写自己的连接任务,就像您在kstreams中所做的那样