• 6

    小节数

  • 279

    浏览数

  • 0

    学习人数

Kafka简介

  • Kafka使用scala开发,支持多语言客户端(c++、java、python、go等)

  • Kafka最先由LinkedIn公司开发,之后成为Apache的顶级项目。

  • Kafka是一个分布式的、分区化、可复制提交的日志服务

  • LinkedIn使用Kafka实现了公司不同应用程序之间的松耦和,那么作为一个可扩展、高可靠的消息系统 支持高Throughput的应用

  • scale out:无需停机即可扩展机器

  • 持久化:通过将数据持久化到硬盘以及replication防止数据丢失

  • 支持online和offline的场景


Kafka的特点

Apache Kafka是一种高吞吐量的分布式发布订阅消息系统,它最初是由Linkedin开发,之后成为了Apache项目的一部分。其具有以下几个特点:

  1. 面向记录(Message Oriented): 支持不同的数据类型,允许每个记录包含多个字段;

  2. 可扩展性:支持水平可伸缩性,可以动态增加分区数;

  3. 容错性:支持持久化日志,提供零丢失保证;

  4. 消息顺序:生产者发送的消息将严格按照顺序存储到对应的分区,消费者接收到的消息也将按照先进先出的顺序消费;

  5. 分布式:跨多台服务器部署,能提供更高的吞吐量和容错性;

  6. 时效性:通过自动复制机制确保消息在不间断的时间段内传递到所有副本,保证了可靠性;

  7. API友好:提供多种编程接口,包括Java、Scala、C/C++、Python等。

总之,Kafka是一个用于构建实时数据管道和可靠的数据传输系统的优秀工具。本文只涉及到其中几方面的内容,比如消息的存储、分发、发布、消费、可靠性保证等。

  • Kafka是分布式的,其所有的构件borker(服务端集群)、producer(消息生产)、consumer(消息消费者)都可以是分布式的。

  • 在消息的生产时可以使用一个标识topic来区分,且可以进行分区;每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。

  • 同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。

  • 消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡


常用的场景

1、监控:主机通过Kafka发送与系统和应用程序健康相关的指标,然后这些信息会被收集和处理从而创建监控仪表盘并发送警告。

2、消息队列: 应用程度使用Kafka作为传统的消息系统实现标准的队列和消息的发布—订阅,例如搜索和内容提要(Content Feed)。比起大多数的消息系统来说,Kafka有更好的吞吐量,内置的分区,冗余及容错性,这让Kafka成为了一个很好的大规模消息处理应用的解决方案。消息系统 一般吞吐量相对较低,但是需要更小的端到端延时,并尝尝依赖于Kafka提供的强大的持久性保障。在这个领域,Kafka足以媲美传统消息系统,如ActiveMR或RabbitMQ

3、站点的用户活动追踪: 为了更好地理解用户行为,改善用户体验,将用户查看了哪个页面、点击了哪些内容等信息发送到每个数据中心的Kafka集群上,并通过Hadoop进行分析、生成日常报告。

4、流处理:保存收集流数据,以提供之后对接的Storm或其他流式计算框架进行处理。很多用户会将那些从原始topic来的数据进行 阶段性处理,汇总,扩充或者以其他的方式转换到新的topic下再继续后面的处理。例如一个文章推荐的处理流程,可能是先从RSS数据源中抓取文章的内 容,然后将其丢入一个叫做“文章”的topic中;后续操作可能是需要对这个内容进行清理,比如回复正常数据或者删除重复数据,最后再将内容匹配的结果返 还给用户。这就在一个独立的topic之外,产生了一系列的实时数据处理的流程。

5、日志聚合:使用Kafka代替日志聚合(log aggregation)。日志聚合一般来说是从服务器上收集日志文件,然后放到一个集中的位置(文件服务器或HDFS)进行处理。然而Kafka忽略掉 文件的细节,将其更清晰地抽象成一个个日志或事件的消息流。这就让Kafka处理过程延迟更低,更容易支持多数据源和分布式数据处理。比起以日志为中心的 系统比如Scribe或者Flume来说,Kafka提供同样高效的性能和因为复制导致的更高的耐用性保证,以及更低的端到端延迟

6、持久性日志:Kafka可以为一种外部的持久性日志的分布式系统提供服务。这种日志可以在节点间备份数据,并为故障节点数据回复提供一种重新同步的机制。Kafka中日志压缩功能为这种用法提供了条件。在这种用法中,Kafka类似于Apache BookKeeper项目。