概念入门
特性
- 分布式、基于Pub/Sub的消息系统
- 以时间复杂度为O(1)的方式提供消息持久化的能力,保证海量数据的高性能
- 高吞吐率,即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上的消息的传输
- 支持Server间的消息分区,分布式消费,也保证每个partition内的顺序传输,如果业务要求全局有序只能一个topic一个partition
- 同时支持离线数据处理和实时数据处理
-
概念
Broker:Kafka集群包含的一个或多个服务器
- Topic:每条发布到集群的消息都有一个类别即Topic
- Partition:是物理上的概念,每个Topic包含一个或多个Partition
- Producer:发布消息到Broker
- Consumer:消息消费者,向Broker读取消息
ConsumerGroup:每个Consumer属于一个特定的组,如不指定组名则属于默认组
单机部署结构
集群部署结构
多Partition
Partition和Replica
Kafka-manager
-
简单使用
单机
```bash wget ‘https://downloads.apache.org/kafka/2.7.0/kafka_2.13-2.7.0.tgz‘ tar xf kafka_2.13-2.7.0.tgz cd kafka_2.13-2.7.0 vim config/server.properties
listeners=PLAINTEXT://localhost:9092
./bin/zookeeper-server-start.sh config/zookeeper.properties ./bin/kafka-server-start.sh config/server.properties
命令行操作
bin/kafka-topics.sh —zookeeper localhost:2181 —list #查看topic bin/kafka-topics.sh —zookeeper localhost:2181 —create —topic testk —partitions 4 —replication-factor 1 bin/kafka-topics.sh —zookeeper localhost:2181 —describe —topic testk
bin/kafka-console-consumer.sh —bootstrap-server localhost:9092 —from-beginning —topic testk bin/kafka-console-producer.sh —bootstrap-server localhost:9092 —topic testk
简单性能测试
bin/kafka-producer-perf-test.sh —topic testk —num-records 1000000 —record-size 1000 —throughput 1000000 —producer-props bootstrap.servers=localhost:9092 bin/kafka-consumer-perf-test.sh —bootstrap-server localhost:9092 —topic testk —fetch-size 1048576 —messages 100000 —threads 1
<a name="d3gAx"></a>## Java<br /><a name="geJJP"></a># 集群配置<a name="xxhpg"></a>## 配置文件```bashbroker.id=1,2,3# 单个机器上部署三个节点需要配置不同的目录log.dirs=log1,log2,log3
高级特性
生产者
执行步骤
- 客户端实现序列化,分区,压缩操作
确认模式
- acks=0 只发送不管有没有写入到broker
- acks=1 写入到leader就认为成功
- acks=-1/all 写入到最小的副本数则认为成功
同步发送
异步发送
顺序保证
- 必须是在同步发送的模式下才能保证
- max.in.flight.requests.per.connnection = 1
消息可靠性传输
- acks=-1/all; 保证多个副本
- enable.idempotence=true; 打开幂等操作,此时也默认会把acsk设置为-1/all
- transaction.id 增加事务ID
消费者
触发groupRebalance
- 一个consumer挂掉
- 新加入一个consumer
- topic里加入一个新的partition
一个新的topic匹配已有的订阅规则(subscribed regx)
consumerGroup与partition关系
offset同步提交
offset记录consumer消费的位置
- commit后offset才会被记录
offset异步提交
offset自动提交
offsetSeek


