Kafka和消息队列之间的超快速比较-36大数据
作者:Hendrik Swanepoel
翻译:Vincent
译者注:本文的目的是让读者快速了解Kafka与消息队列之间的关系,告诉读者为什么会考虑使用它的原因。以下为译文。
平时你可能不太关注这些问题,但是当你想要采用 响应式编程 风格而不是 命令式编程 风格时,上述这些就是你需要进行关注的了。
命令式编程和响应式编程之间的区别
命令式编程是我们一开始就采用的编程类型。当发生了一些事情,换句话说,事件发生了,然后你的代码被告知发生了该事件。例如,用户单击一个按钮,你在代码中处理这个事件的地方,就决定了你希望系统接下来触发哪些动作。您可以将记录保存到数据库中,调用另一个服务,发送电子邮件,或者将这些动作组合在一起。这里最重要一点是,事件是与这些具体发生的动作是直接耦合的。
响应式编程使用户能够响应发生的事件,通常以流的形式出现。多个关注点可以订阅相同的事件,并让事件在它的域中产生影响,而不管其他域发生了什么。换句话说,它支持松散耦合的代码,可以很容易地扩展到更多的功能。有可能在不同的栈中编码的各种大的下流系统会受到事件的影响,甚至是在云的某个地方执行的一大堆没有服务器的函数。
从消息队列到Kafka
为了理解Kafka会给你的架构带来什么,让我们先谈论一下消息队列。我们之所以从消息队列开始,是因为我们将讨论它的局限性,然后看看Kafka是如何解决这些问题的。
消息队列允许一组订阅者从队列的末尾提取一条或多条消息。在消息被移除之前,队列通常允许执行某些级别的事务,以确保在消息被删除之前执行所需的操作。
并不是所有的队列系统都具有相同的功能,但是一旦消息被处理了,就会从队列中删除掉。如果你仔细想想,它其实与命令式编程非常类似,首先得发生一些事情,然后起始系统决定在下游系统中应该执行哪些操作。
尽管可以在队列中扩展多个消费者,但它们都包含相同的功能,而这只是为了处理负载和并行处理消息,换句话说,它不允许你基于相同的事件启动多个独立的操作。队列消息的所有处理器将在相同的域中执行相同类型的逻辑。这意味着队列中的消息实际上是命令,它适合于命令式编程,而不是一个适合于响应式编程的事件。
你仍然可以在相同的域中进行并行处理,但是更重要的是,你还可以添加不同类型的消费者,这些消费者基于相同的事件执行不同的逻辑。换句话说,对于Kafka,用户可以采用一个被动的pub/sub体系结构。
总结
Kafka还有其它很多的功能,比如它是如何管理扩展(分区)的、为可靠消息传递提供了哪些配置选项等等,但我希望这篇文章足够好,让你明白为什么你会考虑采用Kafka而不是好的“ol消息队列”。
End.
转载请注明来自36大数据(36dsj.com): 36大数据 » Kafka和消息队列之间的超快速比较