定义
Kafka传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
Kafka 最新定义:Kafka是一个开源的分布式事件流平台(Event Streaming Platform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。
kafka 场景
(1)日志收集:收集各种服务的 log,通过 kafka 以统一接口服务的方式开放 给各种 consumer,例如 Hadoop、Hbase、Solr 等;
(2)消息系统:解耦和生产者和消费者、缓存消息等;
(3)用户活动跟踪:Kafka 经常被用来记录 web 用户或者 app 用户的各种活动,如浏览网页、搜索、点 击等活动,这些活动信息被各个服务器发布到 kafka 的 topic 中,然后订阅者通过订阅这些 topic 来做实时 的监控分析,或者装载到 Hadoop、数据仓库中做离线分析和挖掘;
(4)运营指标:Kafka 也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作 的集中反馈,比如报警和报告;
broker:节点,就是你看到的机器
provider:生产者,发消息的
consumer:消费者,读消息的
zookeeper:信息中心,记录 kafka 的各种元数据的地方
controller:其中的一个 broker,作为 leader 身份来负责管理整个集群。如果挂掉,借助 zk 重新选主
topic:主题,一个消息的通道,收发总得知道消息往哪投
partition:分区,每个主题可以有多个分区分担数据的传递,多条路并行,吞吐量大
Replicas:副本,每个分区可以设置多个副本,副本之间数据一致。相当于备份,有备胎更可靠
leader & follower:主从,上面的这些副本里有 1 个身份为 leader,其他的为 follower。leader 处理 partition 的所有读写请求
bin/kafka-topics.sh
参数 | 描述 |
---|---|
–bootstrap-server |
连接的 Kafka Broker 主机名称和端口号 |
–topic |
操作的 topic 名称 |
–create | 创建主题 |
–delete | 删除主题 |
–alter | 修改主题 |
–list | 查看所有主题 |
–describe | 查看主题详细描述 |
–partitions |
设置分区数 |
–replication-factor |
设置分区副本 |
–config |
更新系统默认的配置 |
kafka-topics.sh --bootstrap-server kafka.big-data.svc.cluster.local:9092 --describe
kafka-topics.sh --bootstrap-server kafka.big-data.svc.cluster.local:9092 --create --partitions 3 --replication-factor 3 --topic demo
kafka-topics.sh --bootstrap-server kafka.big-data.svc.cluster.local:9092 --delete --topic demo
bin/kafka-console-producer.sh
参数名称 | 描述 |
---|---|
bootstrap.servers | 生产者连接集群所需的broker地址清单。例如hadoop102:9092,hadoop103:9092,hadoop104:9092可以设置1个或者多个,中间用逗号隔开。注意这里并非需要所有的broker地址,因为生产者从给定的broker里查找到其他broker信息 |
key.serializer 和 value.serializer | 指定发送消息的 key 和 value 的序列化类型。一定要写全类名 |
buffer.memory | RecordAccumulator 缓冲区总大小,默认32m |
batch.size | 缓冲区一批数据最大值,默认16k。适当增加该值,可以提高吞吐量,但是如果该值设置太大,会导致数据传输延迟增加。 |
linger.ms | 如果数据迟迟未达到 batch.size,sender 等待 linger.time之后就会发送数据。单位 ms,默认值是 0ms,表示没有延迟。生产环境建议该值大小为 5-100ms 之间。 |
acks | 0:生产者发送过来的数据,不需要等数据落盘应答。 1:生产者发送过来的数据,Leader 收到数据后应答。 -1(all):生产者发送过来的数据,Leader+和 isr 队列 里面的所有节点收齐数据后应答。默认值是-1,-1 和 all 是等价的 |
max.in.flight.requests.per.connection | 允许最多没有返回 ack 的次数,默认为 5,开启幂等性要保证该值是 1-5 的数字 |
retries | 当消息发送出现错误的时候,系统会重发消息。retrie表示重试次数。默认是 int 最大值,2147483647。 如果设置了重试,还想保证消息的有序性,需要设置MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION=1 否则在重试此失败消息的时候,其他的消息可能发送成功了 |
retry.backoff.ms | 两次重试之间的时间间隔,默认是 100ms |
enable.idempotence | 是否开启幂等性,默认 true,开启幂等性。 |
compression.type | 生产者发送的所有数据的压缩方式。默认是 none,就是不压缩。 支持压缩类型:none、gzip、snappy、lz4 和 zstd。 |
bin/kafka-console-producer.sh --bootstrap-server kafka.big-data.svc.cluster.local:9092 --topic demo
> hello world
> hello vip-mall
bin/kafka-console-consumer.sh
参数名称 | 描述 |
---|---|
bootstrap.servers | 向 Kafka 集群建立初始连接用到的 host/port 列表。 |
key.deserializer和value.deserializer | 指定接收消息的 key 和 value 的反序列化类型。一定要写全类名。 |
group.id | 标记消费者所属的消费者组。 |
enable.auto.commit | 默认值为 true,消费者会自动周期性地向服务器提交偏移量。 |
auto.commit.interval.ms | 如果设置了 enable.auto.commit 的值为 true, 则该值定义了消费者偏移量向 Kafka 提交的频率,默认 5s。 |
auto.offset.reset | 当 Kafka 中没有初始偏移量或当前偏移量在服务器中不存在(如,数据被删除了),该如何处理? earliest:自动重置偏移量到最早的偏移量。 latest:默认,自动重置偏移量为最新的偏移量。 none:如果消费组原来的(previous)偏移量不存在,则向消费者抛异常。 anything:向消费者抛异常。 |
offsets.topic.num.partitions | __consumer_offsets 的分区数,默认是 50 个分区。 |
heartbeat.interval.ms | Kafka 消费者和 coordinator 之间的心跳时间,默认 3s。该条目的值必须小于 session.timeout.ms ,也不应该高于session.timeout.ms 的 1/3。 |
session.timeout.ms | Kafka 消费者和 coordinator 之间连接超时时间,默认 45s。超过该值,该消费者被移除,消费者组执行再平衡。 |
max.poll.interval.ms | 消费者处理消息的最大时长,默认是 5 分钟。超过该值,该消费者被移除,消费者组执行再平衡。 |
fetch.min.bytes | 默认 1 个字节。消费者获取服务器端一批消息最小的字节数。 |
fetch.max.wait.ms | 默认 500ms。如果没有从服务器端获取到一批数据的最小字节数。该时间到,仍然会返回数据。 |
fetch.max.bytes | 默认 Default: 52428800(50 m)。消费者获取服务器端一批消息最大的字节数。如果服务器端一批次的数据大于该值(50m)仍然可以拉取回来这批数据,因此,这不是一个绝对最大值。一批次的大小受 message.max.bytes (broker config)or max.message.bytes (topic config)影响。 |
max.poll.records | 一次 poll 拉取数据返回消息的最大条数,默认是 500 条。 |
bin/kafka-console-consumer.sh --bootstrap-server kafka.big-data.svc.cluster.local:9092 --topic demo
bin/kafka-console-consumer.sh --bootstrap-server kafka.big-data.svc.cluster.local:9092 --topic demo --from-beginning
官方文档
滴滴KnowStreaming
为何使用消息系统
我们为何需要搭建Apache Kafka分布式系统
消息队列中点对点与发布订阅区别
apache Kafka概要介绍
Kafka副本同步机制理解
Kafka文件存储机制那些事
Kafka数据可靠性与一致性解析
Kafka集群partitions/replicas默认分配解析
Apache Kafka消息传递可靠性分析
Apache Kafka中Follower如何与Leader同步数据
Apache Kafka Broker HA机制
《Kafka & Mafka技术分享及讨论》
Kafka内部网络框架模型分析
Kafka延时分析
MQ关注和共性分享
Kafka delivery保证
apache Kafka Replication设计分析
带你去MQ的世界旅行
kafka运行环境优化分析
kafka server部署配置优化
基于Kafka如何搭建一个稳定可靠的zk集群服务
Kafka Producer机制优化-提高发送消息可靠性
Kafka Consumer机制优化-保证每条消息至少消费一次
Mafka消息中间件系统SLA
基于Kafka时间粒度消息回溯设计方案
kafak安装与使用
apache kafka中server.properties配置文件参数说明
Apache kafka客户端开发-java
kafka的ZkUtils类的java版本部分代码
kafka log4j配置
apache kafka的consumer初始化时获取不到消息
apache kafka源码构建打包
apache kafka迁移与扩容工具用法
如何在Kafka上创建一个Topic
如何在Kafka上对一个Topic增加partition
如何在Kafka上对一个Topic增加replicas
如何在Kafka中修改Topic的preferred replica
如何在Kafka中对Topic的leader进行均衡
apache kafka中topic级别配置
.apache Kafka下线broker的操作
kafka LeaderNotAvailableException
kafka.common.ConsumerRebalanceFailedException异常解决办法
apache Kafka中partition的leader为-1情况分析
kafka-0.8.2.1-src编译报错解决办法
Consumer rebalance失败问题定位和解决思路
线上Mafka集群网卡打爆原因分析及解决方案
apache kafka监控系列-监控指标
apache kafka jmx监控指标参数
apache kafka监控系列-kafka-web-console
apache kafka监控系列-KafkaOffsetMonitor
雅虎开源管理工具Kafka Manager
Zookeeper管理或操作Apache Kafka
apache kafka性能测试命令使用和构建kafka-perf
Kafka性能测试报告(虚拟机版)
kafka在zookeeper中存储结构
kafka replication设计机制
Kafka Producer处理逻辑
apache kafka源代码工程环境搭建(IDEA)
Kafka Controller设计机制
kafka broker内部架构
apache kafka源码分析走读-kafka整体结构分析
apache kafka源码分析走读-Producer分析
apache kafka性能优化架构分析
apache kafka源码分析走读-server端网络架构分析
apache kafka源码分析走读-ZookeeperConsumerConnector分析
kafka & mafka client开发与实践
kafka的ZookeeperConsumer实现
Kafka通过timestamp获取offset的机制详解
apache Kafka是如何实现删除数据文件(日志)的
kafka broker shutdown过程分析
apache kafka系列之源码分析走读-kafkaApi详解
apache kafka系列之源码分析走读-SocketServer分析
mafka平台架构
Mafka Roadmap和实现
Kafka0.8.2.1删除topic逻辑
探讨kafka的分区数与多线程消费
flume写入kafka,使用自带的org.apache.flume.sink.kafka.KafkaSink启动sink报错
Kafka集群平滑重启
Kafka副本管理—— 为何去掉replica.lag.max.messages参数
Kafka原理以及设计实现思想
Linkedin Kafka Monitor安装使用
Kafka如何创建topic?
Kafka源码分析 KafkaApis(LogAppend)
Kafka源码分析 ISR和Replica
Kafka源码深度解析
分布式消息队列RocketMQ与Kafka的18项差异之“拨乱反正”
分布式消息队列RocketMQ与Kafka的18项差异之“拨乱反正“之2
Apache Kafka最佳实践
解决kafka集群由于默认的__consumer_offsets这个topic的默认的副本数为1而存在的单点故障问题
kafka数据可靠性深度解
kafka【系统配置说明】 - server.properties
kafka学习笔记:知识点整理
Kafka 高性能吞吐揭秘
Kafka服务端异步刷盘性能测试
Producer 性能调优公式及验证
Producer -Metadata的数据结构与读取、更新策略
kafka数据可靠性深度解读