在这一章中我们将讨论Kafka的优缺点,因为,在使用任何技术之前了解这项技术的局限性非常重要,在优点明显的情况下也是如此。
内容
1. Kafka的优点
在这里,我们列出了Kafka的一些优点,这些优点使Kafka成为我们实现数据湖(Data Lake)的理想选择。那么,让我们开始详细了解Kafka的优势:
pic
a. 高吞吐量
即使不使用很强大的硬件,Kafka也能够处理高速、大容量的数据,而且,Kafka可以支持每秒几千条消息的吞吐量。
b. 低延迟
Kafka能够以毫秒级的极低延迟处理消息,目前大多数新用例都有这个需求。
c. 容错
Kafka的最大优点之一是容错。Kafka的一个固有功能是能够抵抗集群中的节点故障。
d. 持久性
耐久性是指硬盘里数据/消息的持久性。能保持持久性原因之一是消息复制,因此消息永远不会丢失。
e. 可伸缩性
添加额外的节点不会对当前的进程造成任何影响,因此Kafka的伸缩性很强。而且,在Kafka集群内部,消息处理完全透明并且是无缝连接的。
f. 分布式
Kafka的分布式体系结构使其可以使用复制和分区等功能进行扩展。
g. 消息代理能力
Kafka作为传统消息代理的替代者工作的很好。这里消息代理指的是一个中间程序,它将发布者的消息传递协议格式的消息转换为接收者的消息协议格式的消息。
h. 高并发
Kafka能够在低延迟的情况下以高吞吐量每秒处理数千条消息 。此外,它允许以高并发读取和写入消息。
i. 默认持久性
正如我们上面讨论的那样,消息是持久的,这使得它长期有效且可靠。
j. 消费者友好
Kafka可以与各种消费者进行集成。Kafka最大的好处是,根据消费者的不同,它可以表现或采取不同的行为,因为每个客户都有不同的能力来处理Kafka的消息。此外,Kafka可以与由各种语言实现的各种消费者很好地集成。
k. 批处理能力(ETL之类的功能)
Kafka也可以用于类似批处理的用例,还可以执行传统ETL的工作,因为它的消息是持久性的。
l. 用例的多样性
Kafka能够管理数据湖(Data Lake)需要的各种用例,例如,日志聚合,Web活动跟踪等。
m. 实时处理
Kafka可以处理实时数据管道。由于我们需要找到一项技术去处理来自应用程序的实时消息,因此实时处理是我们选择Kafka的核心原因之一。
2. Kafka的缺点
知道卡夫卡的局限性对我们有好处,即使它的优点看起来比它的缺点更突出。在这里我们列出了与Kafka相关的一些缺点:
pic
a. 没有完整的监控工具集
Kafka缺乏一套完整的管理和监控工具。 因此,企业支持人员对选择Kafka并从长远来看支持它感到焦虑或恐惧。
b. 消息调整的问题
众所周知,代理使用某些系统调用来向消费者传递消息,但是,如果消息需要一些调整,Kafka的性能会大大降低。因此,如果消息不被更改,Kafka可以很好地执行,因为它使用系统的功能。
c. 不支持使用通配符选择主题
有一个问题是Kafka只能精确的匹配主题名称,这意味着它不支持使用通配符选择主题, 这使得它无法满足某些用例的需求。
d. 缺乏一致性
由于缺乏一致性,可能会出现问题,因为其他编程语言所需的API是由不同的个人和企业维护的。
e. 性能降低
通常,单个消息大小处理起来没有问题,但是,随着总数据量的增加,代理和消费者开始压缩这些消息。因此,在解压缩时,节点内存的使用会越来越慢。另外,当数据在管道中流动时,也会发生压缩,这就影响了吞吐量和性能。
f. 表现笨拙
有时,当Kafka群集中的队列数量增加时,它开始表现得有点笨拙和缓慢。
g. 缺乏一些消息传递范例
Kafka中缺少一些消息传递范例,比如请求/回复,点对点队列等。虽然并非总是如此,但对于某些用例,还是会造成问题。