传统消息队列的应用场景:
使用消息队列的好处:
- 解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
- 可恢复性:系统的一部分组件失效了,不会影响到整个系统,即使一个处理消息的进程挂掉,加入队列中的消息仍可在系统恢复后被处理。
- 缓冲:有助于控制和优化数据流经过系统的速度, 解决生产消息和消费消息的处理速度不一致的情况。
- 灵活性&峰值处理能力:应对突发流量,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
- 异步通信:消息队列提供异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
1、kafka消费模式:
点对点消费模式:一对一,消费者主动拉取数据,消息收到后消息清除。
发布/订阅模式:一对多,消费者消费数据后不会清除。
2、---------------------------------------------------------------------------------------------------------------------------
Linux环境安装配置kafka:
kafka自带的Zookeeper程序使用bin/zookeeper-server-start.sh,以及bin/zookeeper-server-stop.sh来启动和停止Zookeeper。而Zookeeper的配制文件是config/zookeeper.properties,可以修改其中的参数。
1 启动zookeeper,加-daemon参数,可以在后台启动Zookeeper,输出的信息在保存在执行目录的logs/zookeeper.out文件中。
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
2 kafka的基本配置:
kafka的配置文件在config/server.properties文件中,主要修改参数如下,更具体的参数说明以后再整理下。
broker.id是kafka broker的编号,集群里每个broker的id需不同。我是从0开始。
listeners是监听地址,需要提供外网服务的话,要设置本地的IP地址。
log.dirs是日志目录,需要设置。
设置Zookeeper集群地址,我是在同一个服务器上搭建了kafka和Zookeeper,所以填的本地地址。
num.partitions 为新建Topic的默认Partition数量,partition数量提升,一定程度上可以提升并发性。
内部topic配置:内部__consumer_offsets和__transaction_state两个topic,分组元数据的复制因子,为了保证可用性,在生产上建议设置大于1。
default.replication.factor为kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务,是在自动创建topic时的默认副本数,可以设置为3。
num.network.threads=3 #用来处理磁盘 IO 的现成数量 ,num.io.threads=8 #发送套接字的缓冲区大小 socket.send.buffer.bytes=102400 #接收套接字的缓冲区大小 socket.receive.buffer.bytes=102400 #请求套接字的缓冲区大小 socket.request.max.bytes=104857600
3 启动Kafka:
bin/kafka-server-start.sh -daemon config/server.properties
4 停止Kafka:
bin/kafka-server-stop.sh config/server.properties
5 单机版测试zk和kafka:
(新版的Kafka中的不需要zk连接字符串,即- -zookeeper localhost:2181。使用 Kafka Broker的 --bootstrap-server localhost:9092来替代- -zookeeper localhost:2181)
原命令:bin/kafka-topics.sh--create --zookeeper 192.168.202.128:2181--replication-factor 3--partitions 3--topic test
创建topic和使用:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 1 --replication-factor 1
查看测试:
./kafka-console-producer.sh --broker-list localhost:9092 --topic test
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
当需要把以往的数据也进行显示的话,可以在命令后添加–from-beginning,接收数据成功。
查看topic列表:bin/kafka-topics.sh --list --bootstrap-server localhost:9092
查看topic明细:bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test
删除topic:bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic test
修改topic:
增加分区数:bin/kafka-topics.sh --alter --bootstrap-server localhost:9092 --topic test1206 --partitions 3
增加配置:bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name test1206 --alter --add-config max.message.bytes=128000
查看:bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name test1206 --describe
删除配置:bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name test1206 --alter --delete-config max.message.bytes
查看:bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name test1206 --describe
---------------------------------------------------------------------------------------------------------------------------------
3、kafka的基本架构和名词解释:
- Producer : 消息生产者,就是向 Kafka ;
- Consumer : 消息消费者,向 Kafka broker 取消息的客户端;
- Consumer Group (CG): 消费者组,由多个 consumer 组成。 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。 所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
- Broker :经纪人 一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker可以容纳多个 topic。
- Topic : 话题,可以理解为一个队列, 生产者和消费者面向的都是一个 topic;
- Partition: 为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;
- Replica: 副本(Replication),为保证集群中的某个节点发生故障时, 该节点上的 partition 数据不丢失,且 Kafka仍然能够继续工作, Kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。
- Leader: 每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
- Follower: 每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。 leader 发生故障时,某个 Follower 会成为新的 leader。
4、topic基本使用:(详见目录2)