kafka

一:kafka

官方网站:http://kafka.apache.org

kafka被称为下一代分布式消息系统,由scla和java编写,是非营利性组织ASF(Apache Software Foundation,简称ASF)基金会中的一个开源项目,比如HTTPServer、Hadoop、ActiveMQ、Tomcat等开源软件都属于Apache基金会的开源软件,类似的消息系统还有RabbitMQ、ActiveMQ、ZeroMQ

在这里插入图片描述

Kafka用于构建实时数据管道和流应用程序。它具有水平可伸缩性,容错性,快速性,可在数千家公司中投入生产

1.1:常用的消息队列对比:

kafka最主要的优势是其具备分布式性能、并结合zookeeper可以动态扩容,kakfa是一种高吞吐量的分布式发布订阅信息系统

ActiveMQRabbitMQKafka
所属社区/公司ApacheMozilla Public LIcenseApache/Linkedln
开发语言JavaErlangJava
支持的协议OpenWire、Stomp、Rest、XMPP、AMQPAMQP仿AMQP
事务支持不支持不支持
集群支持支持支持
负载均衡支持支持支持
动态扩容不支持不支持支持(zk)

1.2:kafka优势:

kafka通过O(1)的磁盘数据结构提供消息持久化,这种结构对于即时数以TB的消息存储也能够保持长时间的稳定性能
高吞吐量: 即使是非常普遍的硬件Kafka也可以支持每秒数百万的消息
支持通过Kafka服务器分区消息。
支持Hadoop并行数据加载。

在这里插入图片描述

O(1)就是最低的时空复杂度了,也就是耗时/耗空间的输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变,哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标

1.3:kafka角色:

Broker: Kafka集群包含一个或多个服务器,这种服务器被称为broker

Topic:每条发布到Kafka集群的消息都有一个类别,这个类别称为topic,(物理上不同topic的消息分开存储在不同的文件夹,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需要指定消息的topic即可生产或消费数据而不必关心数据存于何处),topic在逻辑上对record(记录、日志)进行分组保存,消费者需要订阅相应的topic才能消费topic中的消息。

Partition:是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量,每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件,为了实现数据的高可用,比如将分区0的数据分散到不同的kafka节点,每一个分区都有一个broker作为leader和一个broker作为follower。

分区的优势(分区因子为3):
	一:实现存储空间的横向扩容,即将多个kafka服务器的空间结合利用
	二:提升性能,多服务读写
	三:实现高可用,分区leader分布在不同的kafka服务器,比如分区0的leader为服务器A,则服务器B和服务器C为A的follower,而分区1的leader为服务器B,则服务器A和C为服务器B的follower,而分区2的leader为C,则服务器A和B为C的follower。

Producer:负责发布消息到Kafka broker。

Consumer:消费消息,每个consumer属于一个特定的consuer group(可为每个consumer指定group name,若不指定group name则属于默认的group),使用consumer high level API时,同一topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer group 可同时消费这一消息。

在这里插入图片描述

1.4:kafka部署

http://kafka.apache.org/quickstart

部署三台服务的高可用kafka环境

部署环境

Server1:172.16.10.22
Server2:172.16.10.23
Server3:172.16.10.24

1.4.1:版本选择:

http://kafka.apache.org/downloads

1.4.2:各节点部署kafka:

1.4.2.1:kafka节点1:
broker.id=1 #每个broker在集群中的唯一标识,正整数
listeners=PLAINTEXT://172.16.10.22:9092#监听地址
log.dirs=/data/kafka/logs #kafka用于保存数据的目录,所有的消息都会存储在该目录中
num.partitions=1 #设置创建新的topic默认分区数量
log.retention.hours=168 #设置kafka中消息保留时间,默认为168小时及7天
zookeeper.connect=172.16.10.22:2181,172.16.10.23:2181,172.16.10.24:2181  #指定连接的zk的地址,zk中存储了broker的元数据信息
zookeeper.connection.timeout.ms=6000 #设置连接zookeeper的超时时间,默认为6秒钟
1.4.2.2:kafka2节点
broker.id=2 #每个broker在集群中的唯一标识,正整数
listeners=PLAINTEXT://172.16.10.22:9092#监听地址
log.dirs=/data/kafka/logs #kafka用于保存数据的目录,所有的消息都会存储在该目录中
num.partitions=1 #设置创建新的topic默认分区数量
log.retention.hours=168 #设置kafka中消息保留时间,默认为168小时及7天
zookeeper.connect=172.16.10.22:2181,172.16.10.23:2181,172.16.10.24:2181  #指定连接的zk的地址,zk中存储了broker的元数据信息
zookeeper.connection.timeout.ms=6000 #设置连接zookeeper的超时时间,默认为6秒钟
1.4.2.3:kafka3节点
broker.id=3 #每个broker在集群中的唯一标识,正整数
listeners=PLAINTEXT://172.16.10.22:9092#监听地址
log.dirs=/data/kafka/logs #kafka用于保存数据的目录,所有的消息都会存储在该目录中
num.partitions=1 #设置创建新的topic默认分区数量
log.retention.hours=168 #设置kafka中消息保留时间,默认为168小时及7天
zookeeper.connect=172.16.10.22:2181,172.16.10.23:2181,172.16.10.24:2181  #指定连接的zk的地址,zk中存储了broker的元数据信息
zookeeper.connection.timeout.ms=6000 #设置连接zookeeper的超时时间,默认为6秒钟
1.4.2.4:各节点启动kafka:
/apps/kafka_2.12-2.3.1/bin/kafka-server-start.sh -daemon /apps/kafka_2.12-2.3.1/config/server.properties #-daemon 后台启动
1.4.2.5:验证zookeeper中kafka元数据:
1. Broker依赖于Zookeeper,每个Broker的id和Topic、Partition这些元数据信息都会写入Zookeeper的ZNode节点中。
2. Consumer依赖于Zookeeper,Consumer在消费消息时,每消费完一条消息,会将产生的offset保存到Zookeeper中,下次消费在当前offset往后继续消费;
3. Partition依赖于Zookeeper,Partition完成Replication备份后,选举出一个Leader,这个是依托于Zookeeper的选举机制实现的。

在这里插入图片描述

2.5:测试kafka读写数据:

http://kafka.apache.org/quickstart

2.5.1:创建topic

创建名为logstashtest,partitions(分区)为3,replication(每个分区的副本数/每个分区的分区因子)为3的topic(主题):

在任意kafka服务器操作:

[root@mq-server3 ~]# /apps/kafka_2.12-2.3.1/bin/kafka-topics.sh --create --zookeeper 172.16.10.22:2181,172.16.10.23:2181,172.16.10.24:2181 --partition 3 --replication-factor 3 --topic logstashtest

2.5.2:验证topic:

状态说明:logstashtest有三个分区分别为0、1、2,分区0的leader是3(broker.id),分区0有三个副本,并且状态都是lsr(ln-sync,表示可以参加选举成为leader)。

[root@mq-server3 ~]# /apps/kafka_2.12-2.3.1/bin/kafka-topics.sh --describe  --zookeeper 172.16.10.22:2181,172.16.10.23:2181,172.16.10.24:2181  --topic magedu
Topic:magedu	PartitionCount:3	ReplicationFactor:3	Configs:
	Topic: magedu	Partition: 0	Leader: 3	Replicas: 3,1,2	Isr: 3,1,2
	Topic: magedu	Partition: 1	Leader: 1	Replicas: 1,2,3	Isr: 1,2,3
	Topic: magedu	Partition: 2	Leader: 2	Replicas: 2,3,1	Isr: 2,3,1

2.5.3:获取所有topic:

[root@mq-server3 ~]# /apps/kafka_2.12-2.3.1/bin/kafka-topics.sh --list  --zookeeper 172.16.10.22:2181,172.16.10.23:2181,172.16.10.24:2181  

magedu

2.5.4:测试发送消息:

[root@mq-server3 ~]# /apps/kafka_2.12-2.3.1/bin/kafka-console-producer.sh --broker-list 172.16.10.22:9092,172.16.10.23:9092,172.16.10.24:9092 --topic magedu
>msg1    
>msg2  
>msg3

2.5.5:测试获取消息:

可以到任意一台kafka服务器测试消息获取,只要有相应的消息获取客户端即可。

[root@mq-server1 ~]# /apps/kafka_2.12-2.3.1/bin/kafka-console-consumer.sh --topic magedu --bootstrap-server 172.16.10.22:9092 --from-beginning
msg2
msg3
msg1

2.5.6:删除topic:

[root@mq-server3 ~]# /apps/kafka_2.12-2.3.1/bin/kafka-topics.sh --delete --zookeeper 172.16.10.22:2181,172.16.10.23:2181,172.16.10.24:2181  --topic magedu
Topic magedu is marked for deletion.

/apps/kafka_2.12-2.3.1/bin/kafka-topics.sh --delete --zookeeper 172.16.10.22:2181,172.16.10.23:2181,172.16.10.24:2181 --topic magedu
Topic magedu is marked for deletion.


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忙里偷闲学python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值