每个分区是一段提交日志,有偏移量。队列里的topic可配置过期时间,
consumer控制读取的位置offset,consumer之间互不影响。分区是分布式的,所有请求由leader处理,如果配置了副本数,则有对应的follwer。
consumer group:实现了消息队列和广播。
topic会发到每个consumer group的其中一个consumer实例。
相对于传统publish-subscribe机制来说,kafka的subscribe变成集群。
kafka保证消息的顺序。每个分区只被consumer group的一个consumer消费,保证了顺序。
应用领域:
消息,网站行为跟踪,度量,日志聚合,流处理,事件源,提交日志。
环境配置:
1、下载安装包,解压。
2、编辑相关配置文件,启动zk:
bin/zookeeper-server-start.shconfig/zookeeper.properties
启动kafkaserver:
bin/kafka-server-start.shconfig/server.properties
3、创建主题:
bin/kafka-topics.sh--create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 -- topictest
主题可手动创建,也可配置broker自动创建。
4、测试:
bin/kafka-console-producer.sh--broker-list localhost:9092 --topic test
bin/kafka-console-consumer.sh--zookeeper localhost:2181 --topic test --from-beginning
5、配置集群:
拷贝server.properties,修改,用其启动kafkaserver。可以在单机模拟。
手动写producer测试:
启动kafkaserver
启动consumer:kafka-console-consumer.sh--zookeeper xxx:2181 --topic page_visits
java -cp./testkafka-0.0.1-SNAPSHOT-jar-with-dependencies.jar com.cuirong.kafka.test.TestProducer 10
(maven 执行assembly打包所有jar包)
手动写consumer测试:
多数应用使用高级API,若涉及到例如:重启consumer时设置初始化偏移量时必须使用低级API。
高级API隐藏了很多细节,存储zookeeper指定分区最后的偏移量,偏移量是基于consumer group的。
Group name是全局的,两个相同名字不同业务逻辑的group 的consumer同时运行会有问题。
多线程模式,如果每个线程处理多个分区,不能保证顺序。
consumer高级api:
java-cp ./testkafka-0.0.1-SNAPSHOT-jar-with-dependencies.jarcom.cuirong.kafka.test.ConsumerGroupExample xxx:2181group1 page_visits 2
consumer低级api:
需求:
1、读一条消息多次
2、读某topic某分区的部分数据
3、管理事务保证消息只被处理一次
要做的事:
1、详细控制offset。
2、指定topic的分区的lead broker。
3、手动切换broker。
步骤:
1、找出活动的broker,对应topic 的分区的leader broker
2、决定复制broker。
3、数据请求定义
4、获取数据
5、leader改变时的操作。
java -cp./testkafka-0.0.1-SNAPSHOT-jar-with-dependencies.jarcom.cuirong.kafka.test.SimpleExample 10page_visits 0 0 9092