Kafka的使用场景

下面是一些关于Apache kafka 流行的使用场景。这些领域的概述,可查看博客文章

消息

kafka更好的替换传统的消息系统,消息系统被用于各种场景(解耦数据生产者,缓存未处理的消息,等),与大多数消息系统比较,kafka有更好的吞吐量,内置分区,副本和故障转移,这有利于处理大规模的消息。

根据我们的经验,消息往往用于较低的吞吐量,但需要低的端到端延迟,并需要提供强大的耐用性的保证。

在这一领域的kafka比得上传统的消息系统,如的ActiveMQRabbitMQ的。

网站活动追踪

kafka原本的使用场景:用户的活动追踪,网站的活动(网页游览,搜索或其他用户的操作信息)发布到不同的话题中心,这些消息可实时处理,实时监测,也可加载到Hadoop或离线处理数据仓库。

每个用户页面视图都会产生非常高的量。

指标

kafka也常常用于监测数据。分布式应用程序生成的统计数据集中聚合。

日志聚合

使用kafka代替一个日志聚合的解决方案。

流处理

kafka消息处理包含多个阶段。其中原始输入数据是从kafka主题消费的,然后汇总,丰富,或者以其他的方式处理转化为新主题,例如,一个推荐新闻文章,文章内容可能从“articles”主题获取;然后进一步处理内容,得到一个处理后的新内容,最后推荐给用户。这种处理是基于单个主题的实时数据流。从0.10.0.0开始,轻量,但功能强大的流处理,就进行这样的数据处理了。

除了Kafka Streams,还有Apache Storm和Apache Samza可选择。

事件采集

事件采集是一种应用程序的设计风格,其中状态的变化根据时间的顺序记录下来,kafka支持这种非常大的存储日志数据的场景。

提交日志

kafka可以作为一种分布式的外部提交日志,日志帮助节点之间复制数据,并作为失败的节点来恢复数据重新同步,kafka的日志压缩功能很好的支持这种用法,这种用法类似于Apacha BookKeeper项目。







发表于: 1年前   最后更新时间: 1年前   游览量:56503
上一条: kafka入门介绍
下一条: kafka安装和启动

评论…


  • 看了文章之后有几个疑问。想请教一下大神
    1.Kafka适合用作数据存储吗,如果适合,那么怎么保证Consumer连接Kafka接收消息时对数据的不重复消费(就是当Consumer应用程序关闭后再打开消息重复接收了)。
    2.Topic消息的生命周期最低可以配置多少?
    3.那么可以将每个Topic分别设置不同的有效时间吗?例如Topic1的消息有效时间是5分钟,Topic消息的有效时间是7天。

    • 1、比如默认保留7天消息,如果你磁盘够大,你保留1年都可以,不重复消费是你自己配置的。比如auto.offset.reset= latest,就不会重复了,当你需要重新消费之前的数据,改成earliest就可以了。
      2、topic消息的生活周期同上,看你保留多久。
      3、消息是没有状态的,也就是说没有有效时间,默认保留7天。但是你不能把保留时间设置5分钟吧。那你还是用rabbitMQ做吧。kafka不合适。
        • 非常感谢大神的解答!再请教几个问题:
          4.我将producer应用程序发送消息到Kafka完全设置为异步非阻塞的,例如在C语言的producer接口中需要调用rd_kafka_flush()来等待完成producer请求,若果不等待,这样是不是会有丢数据的风险?
          5.另外Kafka方面怎么保证数据完全接收到producer消息呢,是不是每发1条(或若干条)然后对producer进行确认?
            • 你可以看下 http://orchome.com/511 中的ack介绍。

              c语言没用过额,抱歉,但是默认kafka的客户端发送是批量发送的,也就是说,消息并没有马上发送到kafka,而是先保留在缓存中,进行批量准备,然后发送,这也是kafka高效的原因之一,所以你要等待。

              默认kafka异步发送可以通过异步回调通知来确保消息是否成功发送,c语言客户端不知道有没有提供,你可以关注下c语言版本的客户端。
                消息往往用于较低的吞吐量?这句话有些不理解
                谢谢分享
                你好 能提供一些Kafka连接oracle的例子吗
                数量你好,我想问一下,一般broker实例与zookeeper的对应关系如何?
                • zookeeper 是作为性能协调工具的角色存在。存储着你Kafka服务的一些些元数据(partitions、offset等等)。zookeeper集群的作用在于保证Zookeeper服务的高可用。因此你可以根据你的需要来选择是否构建zookeeper集群。
                  • 评论…
                    • in this conversation