【问题标题】:What do you use Apache Kafka for? [closed]你用 Apache Kafka 做什么? [关闭]
【发布时间】:2016-09-13 10:59:59
【问题描述】:

请问我对Kafka的理解是否正确。

对于真正的大数据流,传统的数据库是不够的,所以人们使用诸如 Hadoop 或 Storm 之类的东西。 Kafka 位于上述数据库之上,并提供......实时数据应该去向的方向?

【问题讨论】:

标签: apache-kafka


【解决方案1】:

我不这么认为。

Kafka 是消息系统,它不位于数据库之上

您可以将 KafkaActiveMQRabbitMQ 等消息系统进行比较。

来自 Apache 文档page

Kafka 是一种分布式、分区、复制的提交日志服务。它提供消息传递系统的功能,但设计独特。

要点:

  1. Kafka 在称为主题的类别中维护消息源。
  2. 我们将调用向 Kafka 主题生产者发布消息的进程。
  3. 我们将调用订阅主题的进程并处理已发布消息消费者的提要。
  4. Kafka 作为集群运行,由一个或多个服务器组成,每个服务器称为代理。

客户端和服务器之间的通信是通过简单、高性能、语言无关的 TCP 协议完成的。

用例:

  1. 消息传递Kafka 可以很好地替代更传统的消息代理。在这个领域,Kafka 可与 ActiveMQ 或 RabbitMQ 等传统消息传递系统相媲美
  2. 网站活动跟踪: Kafka 最初的用例是能够将用户活动跟踪管道重建为一组实时发布-订阅源
  3. 指标:Kafka 通常用于运营监控数据,这涉及聚合来自分布式应用程序的统计数据以生成运营数据的集中提要
  4. 日志聚合
  5. 流处理
  6. 事件溯源是一种应用程序设计风格,其中状态更改被记录为按时间排序的记录序列。
  7. 提交日志Kafka 可以作为分布式系统的一种外部提交日志。日志有助于在节点之间复制数据,并充当故障节点恢复数据的重新同步机制

【讨论】:

  • 对不起,但我不明白为什么我们有 Kafa 来完成看似服务器和客户端之间通信的任务?
  • 在两个不同的企业服务/系统之间提供松散耦合。 Sender 和 Receiver 服务通过消息传递集成松散耦合。访问此链接:enterpriseintegrationpatterns.com 和 enterpriseintegrationpatterns.com/patterns/messaging
  • Apache Kafka is not for Event Sourcing:作者声称,“您可以将 Kafka 用作事件存储或事件日志,但它确实不是一个合适的事件溯源工具。”。作者说加载当前状态很昂贵,因为您必须重播所有过去的状态。不过,我不确定他们是否只是想宣传他们的系统。
  • @MartinThoma,如果您将其用作事件源,您很可能会将最新状态保留在某种缓存中,因此每当有新事件进入时,此缓存/状态就会更新。这通常称为“投影”,因为它是所有事件的投影(与您的实体相关)。仅在发生崩溃的情况下,您需要“重新运行”所有事件以获取投影,但再次取决于您的应用程序,您可以不时“保留”缓存,并重播“丢失”事件
【解决方案2】:

要全面了解Apache Kafka 的角色,您应该有更广泛的了解并了解 Kafka 的用例。现代数据处理系统试图打破经典的应用程序架构。您可以从 kappa 架构概述开始:

在这种架构中,您不会将世界的当前状态存储在任何 SQL 或键值数据库中。所有数据都作为一个或多个事件系列处理并存储在仅附加的不可变日志中。不可变事件更容易在分布式环境中复制和存储。 Apache Kafka 是一个用于存储这些事件并在其他系统组件之间代理它们的系统。

【讨论】:

    【解决方案3】:

    Apache Kafka官网用例:http://kafka.apache.org/documentation.html#uses

    更多用例:-

    Kafka-Storm 管道 - Kafka 可以与 Apache Storm 一起使用来处理数据管道,以实现高速过滤和动态模式匹配。

    【讨论】:

      【解决方案4】:

      Apache Kafka 不仅仅是一个消息代理。它最初是由 LinkedIn 设计和实现的,目的是用作消息队列。自 2011 年起,Kafka 开源并迅速演变为分布式流媒体平台,用于实现实时数据管道和流媒体应用。

      它具有水平可扩展性、容错性、速度快、运行速度快 数以千计的公司生产。

      现代组织拥有各种数据管道,可促进系统或服务之间的通信。当合理数量的服务需要实时相互通信时,事情会变得有点复杂。

      架构变得复杂,因为需要各种集成才能实现这些服务的相互通信。更准确地说,对于包含 m 个源服务和 n 个目标服务的架构,需要编写 n x m 个不同的集成。此外,每个集成都有不同的规范,这意味着可能需要不同的协议(HTTP、TCP、JDBC 等)或不同的数据表示(二进制、Apache Avro、JSON 等),这使事情变得更具挑战性.此外,源服务可能会解决可能影响延迟的连接增加的负载。

      Apache Kafka 通过解耦数据管道,带来更简单、更易于管理的架构。 Kafka 充当高吞吐量分布式系统,源服务在其中推送数据流,使它们可供目标服务实时提取。

      此外,现在有许多用于管理 Kafka 集群的开源和企业级用户界面可用。更多详情请参考my answer to this question

      您可以在博文"Why Apache Kafka?"中找到有关 Apache Kafka 及其工作原理的更多详细信息

      【讨论】:

        【解决方案5】:

        Apache Kafka 是一个用 Scala 和 Java 编写的开源软件平台,主要用于流处理。

        Apache Kafka 的用例有:

        • 消息传递
        • 网站活动跟踪
        • 指标
        • 日志聚合
        • 流处理
        • 事件溯源
        • 提交日志

        有关更多信息,请使用官方 apache Kafka 站点。 https://kafka.apache.org/uses

        【讨论】:

          【解决方案6】:

          Kafka 是一个 pub-sub 高度可扩展的消息传递系统。它充当传输层,保证语义和 Spark steaming 进行处理。我想到的下一个问题是,spark 甚至可以轮询目录以检查文件,甚至从套接字或端口读取。这个卡夫卡和火花如何协同工作?我的意思是用某种语言编写的应用程序,而不是写入数据库进行存储直接馈送到端口(或放置不会真正花费时间而宁愿进行某种批处理的文件),然后从中获取数据由 Kafka 生产者读取,然后通过 Kafka 消费者 API 读取并由 Spark Streaming 处理?

          【讨论】:

            猜你喜欢
            • 2011-04-15
            • 2011-01-05
            • 1970-01-01
            • 2010-09-26
            • 2010-11-25
            • 2010-10-22
            • 1970-01-01
            • 2021-02-17
            • 2010-11-07
            相关资源
            最近更新 更多