Kafka的使用场景

半兽人 发表于: 2016-07-03   最后更新时间: 2019-03-05  

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

消息

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

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

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

网站活动追踪

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

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

指标

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

日志聚合

许多人使用Kafka作为日志聚合解决方案的替代品。日志聚合通常从服务器中收集物理日志文件,并将它们放在中央位置(可能是文件服务器或HDFS)进行处理。Kafka抽象出文件的细节,并将日志或事件数据更清晰地抽象为消息流。这允许更低延迟的处理并更容易支持多个数据源和分布式数据消费。

流处理

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

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

事件采集

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

提交日志

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



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容





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

  • 请教您一个问题,假如我的一个topic 有三个分区,那么生产者生产一条消息后会均匀的分布到这三个分区,那么每个分区都有对这条消息的偏移量。那么假设我的消费者组里面有三个消费者ABC分别对应三个分区 ,那么a消费了这条消息后偏移量+1,那第二个分区中的此条消息不是还存在吗,这种情况该三个消费者是如何维护偏移量的呢?谢谢。

    • 1,生产者把消息发送给集群之后,任务完成了,他不需要知道谁是消费者。
      2、消费者每个人维护自己的offset。

        请问下,我的kafka服务 一个broker,一个分区,一条消息发送到topic成功后,消费者隔了很久(大概十几秒)才能接收到消息,感觉这延迟有点长,这是怎么回事呢?

        看了文章之后有几个疑问。想请教一下大神
        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进行确认?

                • 你可以看下 https://www.orchome.com/511 中的ack介绍。

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

                  默认kafka异步发送可以通过异步回调通知来确保消息是否成功发送,c语言客户端不知道有没有提供,你可以关注下c语言版本的客户端。

                    • 您说的消息批量发送,其实是先进入缓存,这里的缓存作用是类似语事务那样的?如果一条数据写入kafka有问题,这次批量写入就会作废掉,以此来保证写入kafka中的消息顺序?

                        消息往往用于较低的吞吐量?这句话有些不理解

                        谢谢分享

                        你好 能提供一些Kafka连接oracle的例子吗

                        数量你好,我想问一下,一般broker实例与zookeeper的对应关系如何?

                        • zookeeper 是作为性能协调工具的角色存在。存储着你Kafka服务的一些些元数据(partitions、offset等等)。zookeeper集群的作用在于保证Zookeeper服务的高可用。因此你可以根据你的需要来选择是否构建zookeeper集群。