【问题标题】:How does Kafka message processing scale in publish-subscribe mode?Kafka 消息处理在发布-订阅模式下如何扩展?
【发布时间】:2017-12-21 03:16:29
【问题描述】:

所有,请原谅我是Kafka 的新手。目前我正在阅读Kafka关于the difference between traditional message system like Active MQ and Kafka的文档。

如文件所述。

对于传统的消息系统。他们无法扩展消息处理。 自从

发布-订阅允许您将数据广播到多个进程,但是 无法扩展处理,因为每条消息都会发送到每个 订阅者。

我认为这对我来说很有意义。

但是对于Kafka。文档说Kafka 即使在发布-订阅模式下也可以扩展消息处理。 (如果我错了,请纠正我。谢谢。)

Kafka 中的消费者组概念概括了这两个概念。作为 使用队列,消费者组允许您划分处理 通过一组进程(消费者组的成员)。作为 通过发布-订阅,Kafka 允许您将消息广播到 多个消费群体。

Kafka 模型的优点是每个主题都有这两个 属性——它可以扩展处理并且也是多订阅者——那里 无需二选一。

所以我的问题是Kafka 是如何做到的?我的意思是在发布-订阅模式下扩展处理。谢谢。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    Kafka 中支持可扩展发布/订阅的主要独特功能是:

    1. 对单个主题进行分区并将活动分区分布在集群中的多个代理之间,以利用更多机器、磁盘和缓存内存。生产者和消费者通常连接到集群中的许多或所有节点,而不仅仅是给定主题/队列的单个主节点。
    2. 将所有消息存储在顺序提交日志中,并在使用时不删除它们。这会导致更多的顺序读取和写入,使代理不必处理跟踪不同的消息副本、删除单个消息、处理碎片、跟踪哪个消费者已确认消费了哪些消息。
    3. 启用单个消费者和消费者组的智能并行处理,使每个并行消息流可以来自 #1 中提到的分布式分区,同时将偏移管理和分区分配逻辑卸载到客户端本身。 Kafka 与更多的消费者一起扩展,因为消费者做了一些工作(与大多数其他发布/订阅代理不同,大部分工作都在代理中完成)

    【讨论】:

    • 感谢您的评论并回答问题。据我所知。传统的消息传递可以通过集群模式做到#1。正确的? (PS:我想弄清楚Kafka 与传统消息传递相比有什么优势。)
    • 对于#2。如果代理不跟踪消息消费确认。 Kafka 如何确保消息在处理过程中不丢失?谢谢。
    • 不,即使在集群模式下,传统消息传递也无法做到 #1。如果消息是持久的,那么传统消息传递将所有消息存储在单个主节点(无分区)中,然后将整个消息存储复制到其他节点以实现容错。
    • 对于#2,客户负责跟踪他们的偏移量,他们可以选择将它们存储回一个特殊的偏移量跟踪主题
    • 是不是说传统的消息系统即使在集群也不能做负载均衡?只能使高可用吗?谢谢。
    猜你喜欢
    • 2016-07-03
    • 2016-11-25
    • 2013-01-18
    • 2015-09-24
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多