Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 是否建议使用卡夫卡作为真相的来源?_Apache Spark_Cassandra_Apache Kafka_Apache Storm - Fatal编程技术网

Apache spark 是否建议使用卡夫卡作为真相的来源?

Apache spark 是否建议使用卡夫卡作为真相的来源?,apache-spark,cassandra,apache-kafka,apache-storm,Apache Spark,Cassandra,Apache Kafka,Apache Storm,我们的应用程序需要非常高的写入吞吐量(峰值突发期间每秒数千次写入),数据需要进入多个数据存储区,如弹性搜索、HDFS、Cassandra和缓存。(谢天谢地,没有关系) 处理这个问题的最佳方法是什么 让卡夫卡成为所有其他数据存储都可以读取的真相来源(通过Spark/Storm流媒体)是一个好主意吗 卡夫卡是否存在数据丢失的可能性? 数据丢失的可能性是否比直接写信给卡桑德拉更大 编辑:我确实看到一个问题,卡桑德拉施加的约束与卡夫卡施加的约束不同。由于Kafka不施加任何约束,并且会接受任何数据,因此

我们的应用程序需要非常高的写入吞吐量(峰值突发期间每秒数千次写入),数据需要进入多个数据存储区,如弹性搜索、HDFS、Cassandra和缓存。(谢天谢地,没有关系)

处理这个问题的最佳方法是什么

让卡夫卡成为所有其他数据存储都可以读取的真相来源(通过Spark/Storm流媒体)是一个好主意吗

卡夫卡是否存在数据丢失的可能性?
数据丢失的可能性是否比直接写信给卡桑德拉更大

编辑:我确实看到一个问题,卡桑德拉施加的约束与卡夫卡施加的约束不同。由于Kafka不施加任何约束,并且会接受任何数据,因此通过向Kafka写入数据,可能会给应用程序一种成功事务的错误感觉。由于Cassandra中的某些约束冲突,相同的数据可能无法在Cassandra中成功。Cassandra的约束失败示例:
InvalidRequest:Error from server:code=2200[Invalid query]message=“文本类型的“name”的整数常量(500)无效”
。应用程序可能经历了某些数据类型的更改,Kafka很高兴地接受了它,而下游Cassandra消费者则失败了。(该变更如何通过阶段、qa阶段等是另一回事)。因此,将卡夫卡作为真相来源的风险在于,它给人一种虚假的成功感

将卡夫卡作为真相的来源,让所有其他数据存储都可以从中读取,这是一个好主意吗

当然。卡夫卡最初就是为这种模式设计的。即使在Kafka中,也不仅仅是消息代理/发布子系统,同时还在Kafka 0.10中添加了流处理功能

卡夫卡是否存在数据丢失的可能性

在你的数据得到确认后就不会了。在Kafka中,您可以同步或异步写入,并且您可以配置在收到生产者的“确认”之前,应该有多少代理复制了您的数据。比较

数据丢失的可能性是否比直接写信给卡桑德拉更大

我不太熟悉Casandra的细节,但我认为Casandra并不像Kafka那样提供更强的容错能力——这一切归结于您配置的副本数量(您可以为Casandra和Kafka都这样做)


关于Kafka中潜在的损坏数据:Kafka不检查任何书面数据,只处理代理端的
byte[]
。因此,是的,您应该对生产者应用策略,以确保没有损坏的数据写入主题。但是,例如,您可以使用AVRO作为数据类型,它将帮助您保护损坏的数据

谢谢马蒂亚斯<代码>您应该对生产者应用策略,以确保没有损坏的数据写入主题-这实际上很难做到,因为下游系统可能有无数的约束,其中一些约束可能仅由下游系统检查。例如:若下游系统是关系数据库,那个么它可能正在执行一些外键检查或唯一键检查。这些检查只能由实际的下游工具完成。是。但是,如果不同的下游系统有不同的约束,没有一个系统能够以完美的方式实施所有这些约束——要么is将应用最强的约束(从而限制某些消费者),要么is应用最弱的约束,而某些下游系统需要更强的约束。卡夫卡的思想是,使生产者和消费者脱钩——生产者不应规定消费者以何种方式处理数据。因此,每个使用者都应该对数据应用自己的约束,只删除不满足其需要的约束的数据。如果使用DB key示例:如果您尝试在生产者端强制执行此操作,则不关心外键约束的使用者将受到限制--它将只接收满足约束的数据。同时,DB可以删除(而不是插入)不符合FK约束的数据。此外,生产者或中间系统如何知道下游生产者有什么约束?是的,这正是我的观点。基本上,问题在于如何利用卡夫卡作为真相的来源。常见的真相来源是数据库,如MySQL或Cassandra。因此,我试图列举当他们用卡夫卡取代他们的DB真理之源时可能遇到的问题。这不是卡夫卡的限制,可能是由于上述问题,用卡夫卡取代DB真理之源的设计缺陷。因此也有人评论说,很难在卡夫卡制作人代码中预先强制执行所有SOT约束。当然,但在尝试替换其现有的“真相来源”数据库时,应记住上述内容,并准备在进行替换时修复/面对约束问题。