Python 什么';让消费者从发布/订阅主题中读取消息并将其写入NoSQL数据库的最常见方式是什么?
我只需要对每条消息进行最少的解析,即用逗号标记、转换为int并写入数据库 我打算以使用者的身份编写一个Python脚本,并在容器上运行该脚本,以防需要扩展。我很可能会使用谷歌Pub/sub作为Pub-sub引擎,但我想如果我切换到卡夫卡,我也会有同样的问题。 我有几个问题:Python 什么';让消费者从发布/订阅主题中读取消息并将其写入NoSQL数据库的最常见方式是什么?,python,database,apache-spark,apache-kafka,publish-subscribe,Python,Database,Apache Spark,Apache Kafka,Publish Subscribe,我只需要对每条消息进行最少的解析,即用逗号标记、转换为int并写入数据库 我打算以使用者的身份编写一个Python脚本,并在容器上运行该脚本,以防需要扩展。我很可能会使用谷歌Pub/sub作为Pub-sub引擎,但我想如果我切换到卡夫卡,我也会有同样的问题。 我有几个问题: 如果我用Java编写我的消费者,会更好吗?(例如,它会更快吗?我是否需要更少地扩展用户脚本?) 我应该改用apachespark之类的东西作为消费者吗?我不喜欢为了“这么简单”的东西需要处理Spark的微批处理或dStrea
答案取决于您的负载、您当前和潜在的未来需求、您对各种工具和框架的熟悉程度等。 我将集中讨论卡夫卡,因为我对它很熟悉。GooglePub/Sub或Kinesis的语义相似,因此以下内容应该适用 大约1) Json反序列化性能可能因语言而异,但它是一种内存操作。因此,我怀疑这将是你们管道中的瓶颈。 每种语言都有多个json编码器/解码器,这意味着在一种语言的工具系列中有优化的空间。 可以找到一个基于python的小型基准测试。 我的观点是,你不应该使用你不熟悉的语言;您可能会找到一个使用首选语言的性能解决方案 在我不久前做的一个基准测试中,一个卡夫卡消费者在Flink上,用Scala编写,在AWS上,以~3K/s的速度从卡夫卡获取并反序列化Json消息(每个消息约1-2KB)。这是为了提供一个数量级的指示,您应该期望从每个并行过程。 这远远没有得到优化,我敢肯定,如果优化得当,这可能会高出一个数量级。 我想说的是,如果你收到的信息数在每秒100s/1Ks的范围内,你不必太担心。 您可以很容易地设置一个实验,例如,使用json消息 添加一个json反序列化步骤 大约2,3) Spark Streaming与Flink和Storm的系统类型完全相同。它们是分布式流处理器,能够部署大型(有状态)流拓扑,并可扩展到100K-1M消息/秒。但是,它们需要部署在集群上(我通常选择Thread,但它可以是Mesos,也可以是独立的或Kubernetes等)。 对于您描述的用例来说,它们可能是一种过度的杀伤力 在该组的使用者中均匀分布主题分区。如果一个使用者死亡,分配给它的分区将在其余使用者之间进行负载平衡。如果添加了另一个使用者,分区将重新平衡。消费者通过向卡夫卡承诺补偿来标记他们的进步,因此卡夫卡确切地知道在失败的情况下消费者会留在哪里。在某些情况下,已处理的偏移量将无法提交并因此重新处理(至少一次语义),但假设您的操作被设计为幂等的,您就可以了 您可以设计一个解决方案,在该解决方案中,许多并行无状态Kafka使用者正在一组容器上处理和持久化消息,从而实现您的目标。
我的印象是(正如@dawsaw提到的)太前沿了,但我可能错了。你看过《卡夫卡连接》吗?它可以进行简单的转换,并且已经有一些连接器可用于一些常见的数据库。这是一个最小的编码解决方案