1.核心概念
broker: 进程
producer: 生产者
consumer: 消费者
topic: 主题
partitions: 分区 (副本数)
consumergroup:
1.容错性的消费机制
2.一个组内,共享一个公共的ID groupid
3.组内的所有消费者协调在一起,
去消费topic的所有的分区
4.每个分区只能由同一个消费组的一个消费者来消费
123--> 1:0分区 0分区还坐落在2,3机器上面
offset: 每个partition的数据的id
00000000000000000000.index
00000000000000000000.log
00000000000000002000.index
00000000000000002000.log
a1 00000000000000000001
a2 00000000000000000002
a3
...
a2000
00000000000000000000.index
1,0 1代表第一条消息 offset ,偏移量
4,55
10,77
....
....
稀疏表 隔几条记录一次
抛出问题:
1.消费offset 4
2.消费offset 7 -->4 按顺序往后读
3.offset 2700
00000000000000002000.index
00000000000000002000.log
2001 00000000000000002001
2002
segment:
1.log和index文件
2.
log.segment.bytes
log.roll.hours
3.命名规则: 上一个segment分组log文件的最大offset
2.消费语义
at most once: 最多消费一次 消费可能丢失 但是不会重复消费 ?--》log
at least once: 至少消费一次 消费不可能丢失 但是会重复消费 ?--》我司
exactly once: 正好一次 消息不会丢失 也不会重复(这才是我们想要的)
0.10.0.1 不支持不能实现 0.11官方已支持
1.log允许丢 at most once
2.log不允许丢 at least once+ 去重 redis
3.MySQL SQL语句 at least once
insert into jepson1 12; -->hbase ok 重复了
insert into jepson2 13; 挂了
insert into jepson3 14;
选择HBase put: update insert
consumer offset:
1,2,3,4,5
1,2,3
offset没有维护 consumer挂了 是不是从上一次的更新的offset的位置去消费
断点还原
kafka自己本身
topic: test
内嵌一个topic _consumer....
3.Flume-->Kafka-->Spark streaming 经典案例
auto.offset.reset:
latest:
earliest:
none
enable.auto.commit: true
auto.commit.interval.ms:5000
1.....9 挂
offset....15
ConsumerRecord
(
topic = onlinelogs, partition = 0, offset = 2667075,
CreateTime = -1, checksum = 2396351077, serialized key size = -1,
serialized value size = 234,
key = null,
value =
{"hostname":"yws76","servicename":"namenode",
"time":"2018-03-19 15:23:30,028",
"logtype":"INFO",
"loginfo":"org.apache.hadoop.hdfs.server.namenode.FSEditLog:
logSyncAll toSyncToTxId=1377149 lastSyncedTxid=1377148 mostRecentTxid=1377149"}
)
生产:断批还原 +put 保证数据零丢失
批次10000 2000
4.监控 & 心得
1.Kafka
CDH TSQL
SELECT total_kafka_bytes_received_rate_across_kafka_broker_topics ,total_kafka_bytes_fetched_rate_across_kafka_broker_topics
WHERE entityName = "kafka:onlinelogs" AND category = KAFKA_TOPIC
SELECT total_kafka_bytes_fetched_rate_across_kafka_broker_topics
WHERE entityName = "kafka:onlinelogs" AND category = KAFKA_TOPIC
exec source
kafka sink
图:
1.生产者和消费者的速度是一样嘛?
由于趋势度吻合,所以速度一样的
2.为什么消费者的曲线和生产者的曲线趋势度 吻合?
及时消费
么有压力
3.为什么消费者的曲线和生产者的曲线要高?
生产: value
消费: