Kafka学习笔记:
消息队列:
MQ分类:点对点(p2p) 、发布订阅(pub/Sub)
Kafa的概述:
Kafka是分布式的发布订阅消息系统。使用Scala语言编写的
特点:
高吞吐量:百万级的:生产和消费能力
持久性:中间存储比较持久
分布式:整体的健壮性
Kafka:主题、生产者、消费者
Broker:KafKa集群中的一个节点主要存储消息数据
Partition:Topic物理机上的分区,一个topic在broker分为1个或多个partition
无zookeeper无kafka
Kafak的使用:
安装:
去官网下载:Kafka安装包:
使用linux 安装kafka. 略
安装之后首先启动zookeeper.
/bin/zookeeper-server-start.sh /config/aookeeper.properties >> opt/logs/zookeeper-server-start.log
后台启动:
./bin/kafka-server-start.sh ./config/server.properties >>/Users/huyong/App/logs/kafka_run.log 2>&1&
可以使用jps(Java提供的查看java进程的工具查看当前环境中Java的进程的运行)
9230
9492
kafka默认保存数据是7天
product.properties:
1.自定义:partition
Producer也可以根据用户设置的算法来根据消息的key来计算输入那个partition:partitioner.class
2.异步或者同步发送:
配置项:producer.type
3.批量发送可以很有效的提高发送效率。
kafka producer 的异步发送模式运行进行批量发送,先将消息缓存到内存中,然后一次请求批量发送出去
具体配置queue.buffering.max.ms. queue.buffering.max.message默认值为5000和10000
consumner.propeties:
1.一个partition只能被各个消费者中组中的一个消费者消费者消费
2.同一个组内消费者消费的信息不同,不同组中的消费相同
3.一个partition能被多个消费者组消费
4.一个消费者可以消费多个partition
5.在多线程的情况下,一个线程相当于一个消费者
Kafka的操作:
Kafka的单位:message
创建:topic,在创建topic的时候需要指定这个topic下有多少个partition
Kafka的备份是一个partition为单位进行操作的,一个partition的副本数,一定是小于等于broker
对topic进行增删改查的操作:
增加:./bin/kafka-topics.sh --create --topic hello --zookeeper 127.0.0.1:2181 --partitions 2 --replication-factor 1
创建一个topic 名称为hello 连接的zookeeper为本地的2181端口。 这个topic中包含2个partition. 并且有2个副本
这里如果副本数大于broker 将会报这个错:
org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 2 larger than available brokers: 1
命令行中出现:Created topic “hello”.表示创建成功
查询:查看有多少个topic ./bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181
查看某一个固定的topic ./kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic hello
Topic:hello PartitionCount:2 ReplicationFactor:1 Configs:
Topic: hello Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: hello Partition: 1 Leader: 0 Replicas: 0 Isr: 0
执行以上命令会出现这些信息:
含义就是。topic 名为hello 的有2个partition。1个副本 没有配置信息
Leader 是partition 的Leader。他的取值是broker 的id,谁是领导者就使用谁,另一个只作为备份使用
Replicas :是partition 的总的副本broker ID的集合。例如:Replicas 0,1,2,3
Isr:是partition 的可用的副本brokerid的集合。
修改:
修改只能修改是partition 的数量(只能增加)和一些配置文件
./kafka-topics.sh --alter --zookeeper 127.0.0.1:2181 --topic hello --partitions 1
如果修改的时候将partitions 改小。会报如下错误:
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Error while executing topic command : The number of partitions for a topic can only be increased.Topic hello currently has 2 partitions, 1 would not be an increase.
ERROR org.apache.kafka.common.errors.InvalidPartitionsException: The number of partitions for a topic can only be increased. Topic hello currently has 2 partitions, 1 would not be an increase.
因此partition的数量只能往大改
huyongdeMacBook-Pro:bin huyong$ ./kafka-topics.sh --alter --zookeeper 127.0.0.1:2181 --topic hello --partitions 3
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded!
huyongdeMacBook-Pro:bin huyong$ ./kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic hello
Topic:hello PartitionCount:3 ReplicationFactor:1 Configs:
Topic: hello Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: hello Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: hello Partition: 2 Leader: 0 Replicas: 0 Isr: 0
删除:
huyongdeMacBook-Pro:bin huyong$ ./kafka-topics.sh --delete --zookeeper 127.0.0.1:2181 --topic world
Topic world is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
这里的删除不是真正的删除 知识标记为删除,
真正的删除:
将配置文件中的server.properties 中添加delete.topic.enable=true。然后执行删除命令 就会真正的删除
服务重启
ctrl+R 输入关键字 查找历史的脚步,如果不符合继续ctrl+R
生产消费者测试 :使用控制台进行交互
./bin/kafka-console-producer.sh --topic hello --broker-list 127.0.0.1:9092
消费者:
— ./bin/kafka-console-consumer.sh --topic hello --zookeeper 127.0.0.1:2181(老版本的这个)
./kafka-console-consumer.sh --topic hello --bootstrap-server 127.0.0.1:9092 —from-beginning 新版本的这个
消费者默认不是从头消费,而是从当前时间开始消费,如果想要从头开始消费 就需要设置参数:--from-beginning