什么是Kafka?
引用官方原文: “Kafka is a distributed, partitioned, replicated commit log service.”
它提供了一个非常特殊的消息机制,不同于传统的mq。
官网:https://kafka.apache.org
它与传统的mq区别?
更快!单机上万TPS
传统的MQ,消息被消化掉后会被mq删除,而kafka中消息被消化后不会被删除,而是到配置的expire时间后,才删除
传统的MQ,消息的Offset是由MQ维护,而kafka中消息的Offset是由客户端自己维护
分布式,把写入压力均摊到各个节点。可以通过增加节点降低压力
基本术语
为方便理解,我用对比传统MQ的方式阐述这些基本术语。
Producer
Consumer
这两个与传统的MQ一样,不解释了
Topic
Kafka中的topic其实对应传统MQ的channel,即消息管道,例如同一业务用同一根管道
Broker
集群中的KafkaServer,用来提供Partition服务
Partition
假如说传统的MQ,传输消息的通道(channel)是一条双车道公路,那么Kafka中,Topic就是一个N车道的高速公路。每个车道都可以行车,而每个车道就是Partition。
一个Topic中可以有一个或多个partition。
一个Broker上可以跑一个或多个Partition。集群中尽量保证partition的均匀分布,例如定义了一个有3个partition的topic,而只有两个broker,那么一个broker上跑两个partition,而另一个是1个。但是如果有3个broker,必然是3个broker上各跑一个partition。
Partition中严格按照消息进入的顺序排序
一个从Producer发送来的消息,只会进入Topic的某一个Partition(除非特殊实现Producer要求消息进入所有Partition)
Consumer可以自己决定从哪个Partition读取数据
Offset
单个Partition中的消息的顺序ID,例如第一个进入的Offset为0,第二个为1,以此类推。传统的MQ,Offset是由MQ自己维护,而kafka是由client维护
Replica
Kafka从0.8版本开始,支持消息的HA,通过消息复制的方式。在创建时,我们可以指定一个topic有几个partition,以及每个partition有几个复制。复制的过程有同步和异步两种,根据性能需要选取。正常情况下,写和读都是访问leader,只有当leader挂掉或者手动要求重新选举,kafka会从几个复制中选举新的leader。
Kafka会统计replica与leader的同步情况。当一个replica与leader数据相差不大,会被认为是一个"in-sync" replica。只有"in-sync" replica才有资格参与重新选举。
ConsumerGroup
一个或多个Consumer构成一个ConsumerGroup,一个消息应该只能被同一个ConsumerGroup中的一个Consumer消化掉,但是可以同时发送到不同ConsumerGroup。
通常的做法,一个Consumer去对应一个Partition。
传统MQ中有queuing(消息)和publish-subscribe(订阅)模式,Kafka中也支持:
当所有Consumer具有相同的ConsumerGroup时,该ConsumerGroup中只有一个Consumer能收到消息,就是queuing模式
当所有Consumer具有不同的ConsumerGroup时,每个ConsumerGroup会收到相同的消息,就是publish-subscribe模式
基本交互原理
每个Topic被创建后,在zookeeper上存放有其metadata,包含其分区信息、replica信息、LogAndOffset等
默认路径/brokers/topics/<topic_id>/partitions/<partition_index>/state
Producer可以通过zookeeper获得topic的broker信息,从而得知需要往哪写数据。
Consumer也从zookeeper上获得该信息,从而得知要监听哪个partition。
基本CLI操作
1. 创建Topic
./kafka-create-topic.sh --zookeeper 10.1.110.21:2181 --replica 2 --partition 3 --topic test
2. 查看Topic信息
./kafka-list-topic.sh --topic test --zookeeper 10.1.110.24:2181
3. 增加Partition
./kafka-add-partitions.sh --partition 4 --topic test --zookeeper 10.1.110.24:2181
更多命令参见:https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools
创建一个Producer
Kafka提供了java api,Producer特别的简单,举传输byte[] 为例
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
Properties p = new Properties();
props.put("metadata.broker.list", "10.1.110.21:9092");
ProducerConfig config = new ProducerConfig(props);
Producer producer = new Producer<String, byte[]>(config);
producer.send(byte[] msg);
更具体的参见:https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Producer+Example
创建一个Consumer
Kafka提供了两种java的Consumer API:High Level Consumer和Simple Consumer
看上去前者似乎要更牛B一点,事实上,前者做了更多的封装,比后者要Simple的多……
具体例子我就不写了,参见
High Level Consumer: https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Example
Simple Consumer: https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example
快速学习:http://kafka.apache.org/07/quickstart.html
相关推荐
本文是系列文章的第4篇,第一篇"第二篇第三篇第四篇第五篇第六篇《Kafka设计解析》系列上一篇《Kafka高性能架构之道——Kafka设计解析(六)》从宏观架构到具体实现分析了Kafka实现高性能的原理。本文介绍了Kafka...
而随着物联网(IoT)的发展,ARM架构的设备在边缘计算中扮演着越来越重要的角色,因此,Kafka针对ARM平台的版本——kafka_2.11-1.1.0-aarch64应运而生,为ARM设备提供了强大的消息队列服务。 1. **Kafka基础概念** ...
在本文中,我们将对比分析Apache Kafka与Apache RocketMQ在处理大量Topic时的性能表现。上一期测试主要关注了三款消息中间件(Kafka、...而Kafka在面对高Topic数量时可能遇到性能瓶颈,更适合轻量级或特定场景的应用。
综上所述,Kafka作为一个功能强大的分布式消息队列系统,因其高性能、可扩展性和高可靠性而在大数据处理和实时分析领域得到了广泛应用。无论是对于企业级应用还是大规模数据处理平台,Kafka都是一个不可或缺的技术...
### 2021年Java字节跳动面试题之Kafka详解 #### Kafka的设计理念与架构 ...通过以上分析可以看出,Kafka在设计上充分考虑了高性能、高可靠性和易用性等多方面的因素,使其成为处理大规模消息流的理想选择。
- **高性能:** Kafka采用了高效的日志文件存储机制,并利用零拷贝技术提高读写性能。 - **可扩展性:** Kafka支持动态添加和移除Broker,使得系统可以在不停机的情况下扩展或缩小规模。 - **可靠性:** Kafka支持消息...
为了更好地管理和操作Kafka集群,开发者通常会借助一些专用的工具,其中就包括本文主角——kafkatool_64bit.exe,这是一个专为64位操作系统设计的Kafka可视化连接工具,以其便捷的操作和直观的界面,深受广大开发者...
在本压缩包中,包含的是Kafka的一个特定版本——kafka_2.10-0.10.0.1,这个版本适用于Scala 2.10,并且是0.10.0.1的稳定版本。 **1. Kafka的基本概念** - **主题(Topic)**:主题是Kafka中的数据分类,类似于...
《Kafka GUI管理工具——KafkaTool2深度解析》 在大数据实时处理领域,Apache Kafka以其高吞吐、低延迟的特性,成为了消息队列和流处理平台的首选。然而,对于Kafka的管理和运维,如果没有合适的工具,可能会变得...
它主要功能包括发布订阅消息系统、消息持久化、高吞吐量、实时处理和跨数据中心复制。 2. **消息模型**:Kafka使用发布/订阅模型,生产者发布消息到主题(Topic),消费者订阅并消费这些消息。 3. **主题与分区**...
通过源码级别的解析,读者可以更好地掌握Kafka在分布式消息系统中的核心功能和设计思路,从而在实际项目中更有效地运用和优化Kafka。 Kafka是一款高性能、分布式的流处理平台,广泛应用于大数据实时处理和日志收集...
- **主从与分布式**: ActivemQ和RabbitMQ仅支持主从模式,而Kafka和RocketMQ支持真正的分布式消息系统。 - **持久化消息**: ZeroMQ不支持消息持久化;ActivemQ和RabbitMQ支持消息持久化,这对于确保消息的可靠性至关...
《Kafka可视化工具——kafkatool_64bit.exe详解》 在大数据处理和实时流计算领域,Apache Kafka已经成为不可或缺的一部分。作为一个分布式消息中间件,Kafka以其高吞吐量、持久化、容错性以及灵活性而备受赞誉。...
【大数据与云计算教程课件——Kafka开发】 Kafka是一种分布式流处理平台,广泛应用于大数据领域,用于构建实时数据管道和流应用。本教程主要涵盖了Kafka的开发环境搭建、核心概念以及具体实践。 首先,要搭建Kafka...
Apache Kafka是一款高吞吐量、分布式、基于发布/订阅的消息系统,它最初由LinkedIn开发,并最终捐赠给了Apache软件基金会。Kafka v3.3.1作为其最新的版本,带来了诸多性能优化和新特性,为大数据处理和实时数据流...
Kafka是一种高性能、可扩展的分布式消息系统,它主要被设计用于处理大量实时数据流。本文将从Kafka的基本概念出发,深入探讨其技术架构、工作原理及应用场景。 #### 一、Kafka概述 Kafka是一个轻量级、分布式的、...
测试可能包括性能测试、稳定性测试和功能测试,确保Kafka能够有效地处理高并发、低延迟的消息传递需求。 基于这个场景,我们可以深入探讨以下几个Kafka相关的知识点: 1. **Kafka架构**:Kafka由生产者、消费者、...
Kafka提供了一个轻量级的流处理库——Kafka Streams,可以直接在Kafka集群上进行实时数据处理,无需额外的计算集群,简化了实时分析和应用开发。 7. **Kafka Connect** Kafka Connect是一个用于将外部系统(如...