分区实际上是调优Kafka并行度的最小单元。 对于producer而言,它实际上是用多个线程并发地向不同分区所在的broker发起Socket连接同时给这些分区发送消息; 而consumer呢,同一个消费组内的所有consumer线程都被指定topic的某一个分区进行消费(具体如何确定consumer线程数目我们后面会详细说明)。 所以说,如果一个topic分区越多,理论上整个集群所能达到的吞吐量就越大。kafka是由linkedin设计的一个高吞吐量、分布式、基于发布订阅模式的消息系统,使用scala编写,它以可水平扩展、可靠性、异步通信和高吞吐率等特性而被广泛使用。目前越来越多的开源分布式处理系统都支持与kafka集成,其中spark streaming作为后端流引擎配合kafka作为前端消息系统正成为当前流处理系统的主流架构之一。
前面应该还有个数据生产者,比如flume. flume负责生产数据,发送至kafka。 spark streaming作为消费者,实时的从kafka中获取数据进行计算。 计算结果保存至redis,供实时推荐使用。 flume+kafka+spark+redis是实时数据收集与计算的一套经典架构...采集层 主要可以使用flume, kafka两种技术。
flume:flume 是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展api.
kafka:kafka是一个可持久化的分布式的消息队列。
kafka 是一个非常通用的系统。你可以有许多生产者和很多的消费者共享多个主题topics。相比之下,flume是一个专用工具被设计为旨在往hdfs,hbase发送数据。它对hdfs有特殊的优化,并且集成了hadoop的安全特性。所以,cloudera 建议如果数据被多个系统消费的话,使用kafka;如果数据被设计给hadoop使用,使用flume。
正如你们所知flume内置很多的source和sink组件。然而,kafka明显有一个更小的生产消费者生态系统,并且kafka的社区支持不好。希望将来这种情况会得到改善,但是目前:使用kafka意味着你准备好了编写你自己的生产者和消费者代码。如果已经存在的flume sources和sinks满足你的需求,并且你更喜欢不需要任何开发的系统,请使用flume。
flume可以使用拦截器实时处理数据。这些对数据屏蔽或者过量是很有用的。kafka需要外部的流处理系统才能做到。
kafka和flume都是可靠的系统,通过适当的配置能保证零数据丢失。然而,flume不支持副本事件。于是,如果flume代理的一个节点奔溃了,即使使用了可靠的文件管道方式,你也将丢失这些事件直到你恢复这些磁盘。如果你需要一个高可靠行的管道,那么使用kafka是个更好的选择。
flume和kafka可以很好地结合起来使用。如果你的设计需要从kafka到hadoop的流数据,使用flume代理并配置kafka的source读取数据也是可行的:你没有必要实现自己的消费者。你可以直接利用flume与hdfs及hbase的结合的所有好处。你可以使用cloudera manager对消费者的监控,并且你甚至可以添加拦截器进行一些流处理。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
千航国际 |
国际空运 |
国际海运 |
国际快递 |
跨境铁路 |
多式联运 |