文章目录

  • 简介
  • 1.什么是kafka?
  • 2.Kafka的概念
  • 3.Kafka架构
  • kafka整体架构图
  • 使用步骤(以下步骤三台服务器都要操作一遍)
  • 1.准备工作
  • 2.开始搭建集群
  • 2.启动Kafka集群
  • 启动Zookeeper详见[]()
  • 后台启动Kafka:
  • 3.操作Kafka命令
  • 4.最终效果
  • 生产者发送信息
  • 消费者接收信息
  • 总结



简介

1.什么是kafka?

Apache Kafka是分布式发布订阅消息系统,最初由LinkedIn公司开发,之后称为apache项目的一部分。Kafka使用Scala编写,是一种快速的、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与kafka集成。据了解kafka每秒可生产约25万(50MB)的消息,每秒处理55万(110MB)消息。
其设计主要目标为:
1、以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上的数据也能保证常数时间复杂度的访问性能。
2、高吞吐率。即使在非常廉价的机器上也能做到单机支持每秒100K条以上的传输性能。
3、支持Kafka Server的消息分区,及分布式消费,同时保证每个Partition内的消息传输。
4、同时支持离线数据处理和实时数据处理。
5、Scale out:支持水平扩展。

2.Kafka的概念

1、Producer:消息生产者,就是向kafka broker发消息的客户端。
2、Consumer:消息消费者,向kafka broker取消息的客户端。
3、Topic:特定类型的消息流,可以理解为一个队列。
4、Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个CG只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic。
5、Broker:已发布的消息保存在一组服务器中,称之为Kafka集群。一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
6、Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。
7、Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。

3.Kafka架构

kafka集群 leader_kafka集群 leader


Kafka集群的业务处理示意如上图所示。生产者发布消息到集群中,消费者订阅某topic,创建消息流。生产者发布到该话题的消息被均衡地分发到这些流中。

kafka整体架构图

kafka集群 leader_java_02

Kafka的整体架构如上图所示,展示了生产者、消费者、Topic、Partition之间的关系和数据传递。因为Kafka内在就是分布式的,一个Kafka集群通常包括多个代理。为了均衡负载,将话题分成多个分区,每个代理存储一或多个分区。多个生产者和消费者能够同时生产和获取消息。


提示:以下是本篇文章正文内容,下面案例可供参考

使用步骤(以下步骤三台服务器都要操作一遍)

1.准备工作

1、一般情况下,Kafka至少需要准备三台已经搭建好zookeeper集群环境的服务器,具体安装步骤见
2、下载Kafka安装包
https://www.apache.org/dyn/closer.cgi?path=/kafka/1.1.1/kafka_2.12-1.1.1.tgz

2.开始搭建集群

1、把下载的安装包上传至/usr/local目录下,输入tar -zxvf kafka_2.12-1.1.1.tgz命令解压并把文件名称改为kafka

2、配置环境变量

输入vi /root/.bashrc回车,然后配置kafka的路径,多个配置用:隔开

kafka集群 leader_linux_03


3、修改配置文件

输入cd /usr/local/kafka/config命令进入配置文件夹

输入vi server.properties 编辑配置文件

(1) 修改broker.id,确保每台机器的broker.id不一致,本文3台服务器的broker.id分别设置为1、2、3;

(2) port默认为9092,可以根据需要进行修改,一般情况下保持3台服务器一致;

(3) 修改host.name为本机真实IP;

(4) 修改zookeeper.connect,其值为所有服务器上zookeeper的IP端口串,如下所示:

zookeeper.cnotallow=192.168.201.129:2181,192.168.201.131:2181,192.168.201.132:2181

(5) log.dirs=/usr/local/apps/kafka/kafka-logs 配置kafka日志目录

2.启动Kafka集群

启动顺序为启动Zookeeper—>启动Kafka。

启动Zookeeper详见
后台启动Kafka:

/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

3.操作Kafka命令

(1)创建一个名称为test1的Topic,7个分区,并且复制因子为3
/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper 192.168.201.129:2181,192.168.201.131:2181,192.168.201.132:2181 --replication-factor 3 --partitions 7 --topic test1

(2)查看创建的topic信息,需要进入kafka的bin目录下
/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper 192.168.201.129:2181,192.168.201.131:2181,192.168.201.132:2181 --topic test1 (3)在其中一台服务器启动生产者(producer)
/usr/local/kafka/bin/kafka-console-producer.sh --broker-list 192.168.201.129:9092,192.168.201.131:9092,192.168.201.132:9092 --topic test1 (4)在任意议一台服务器启动消费者(consumer),接受消息
/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.201.129:9092,192.168.201.131:9092,192.168.201.132:9092 --topic test1 --from-beginning

4.最终效果

生产者发送信息

kafka集群 leader_kafka集群 leader_04

消费者接收信息

kafka集群 leader_kafka_05


总结

消费者能接收到消息就代表我们已经成功了,学无止境,欢迎留言沟通。