Apache Kafka与Apache Mahout:分布式处理的利器
1. Apache Kafka
Apache Kafka是一个可扩展、容错且高可用的分布式流处理平台,下面将详细介绍其状态管理、容错与扩展、时间语义和精确一次处理语义。
1.1 状态管理
在Kafka的Streams API中,操作符状态是一等公民,类似于Samza,使用表抽象。为了实现高性能,状态通过RocksDB存储在流处理操作符本地。但本地状态不具备容错性,因此状态还会由Kafka集群中的主题进行备份,这些启用了日志压缩的主题被称为变更日志主题。日志压缩确保变更日志主题的大小与状态大小呈线性关系。每次对存储的更新都会写入变更日志主题,因此持久的变更日志主题是真实来源,而本地RocksDB存储只是状态的临时物化视图。
如果应用实例失败,另一个实例可以通过读取变更日志主题来重建状态。为了实现快速故障转移,Kafka Streams还支持备用副本,这些副本保存状态存储的热备用。备用副本可以通过持续从底层变更日志主题读取对主存储的所有更改来维护。
1.2 容错与扩展
Kafka Streams使用与Samza相同的扩展/并行抽象,即分区。由于Kafka Streams从分区主题读取输入数据,这是自然的选择。每个输入主题分区都映射到一个处理该分区记录的任务。任务是独立的并行单元,可以由不同机器上的不同线程执行。这允许通过在不同机器上启动多个实例来扩展Kafka Streams应用程序。所有应用实例组成一个消费者组,Kafka以负载均衡的方式将主题分区分配给所有应用实例。
由于Kafka Streams是一个库,它不能依赖于自动重启失败的实例,因此
Kafka与Mahout分布式处理解析
超级会员免费看
订阅专栏 解锁全文
4092

被折叠的 条评论
为什么被折叠?



