记录一下在 Mac 上安装和测试 kafka 的步骤。
最近在设计一个多分区多副本的消息系统,以前对kafka有一些了解,在阅读了阿里的RocketMQ、小米的Pegasus等分布式系统后,再仔细阅读的kafka的复制设计,整理出本篇文档,可以和其它系统做一个对比。
Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
7年过去了, kafka已经成为一个羽翼丰满的发布订阅平台、消息存储、流处理的工具。财富500强企业中有三分之一的公司使用了kafka平台。也就是在昨天(2017年11月1日),kafka发布了它的1.0.0版本。
本文主要参考了Jun Rao(饶军)的Intra-cluster Replication in Apache Kafka, Jun Rao毕业于清华大学,哥读到博士,后来在IBM、LinkedIn工作,在LinkedIn期间任Kafka组的技术leader。2014年Kafka一帮人成立了Confluent公司,推广Kafka的商业应用,Jun Rao是共同创始人。
翻译自 Kafka/Confluent 公司的工程师 Travis Jeffery 的文章: How Kafka’s Storage Internals Work。
通过本文我会帮助你理解Kafka是如何存储它的数据的。
对于调优Kafka的性能以及了解broker配置实际是干什么的, 了解Kafka的存储很有用。 我受Kafka的简单性的启发, 用我所学开始实现一个Go的Kafka: jocko。
那么, Kafka存储内部是如何工作的呢?
官方英文版本: A Guide To The Kafka Protocol
中文翻译: watchword 翻译于2016年1月31日,修改于6月17日,基于原文2016年5月5日修改版本(v.106)修改翻译: Kafka通讯协议指南
smallnest 基于原文 Jan 20, 2017版本修改。
如果想深入了解Kafka的通讯协议的话,这篇文章不可不读。感谢 watchword 将原文翻译成了中文,我基于最新版进行了修订,修订和完善翻译中的错误。
Kafka 0.9+增加了一个新的特性Kafka Connect,可以更方便的创建和管理数据流管道。它为Kafka和其它系统创建规模可扩展的、可信赖的流数据提供了一个简单的模型,通过connectors可以将大数据从其它系统导入到Kafka中,也可以从Kafka中导出到其它系统。Kafka Connect可以将完整的数据库注入到Kafka的Topic中,或者将服务器的系统监控指标注入到Kafka,然后像正常的Kafka流处理机制一样进行数据流处理。而导出工作则是将数据从Kafka Topic中导出到其它数据存储系统、查询系统或者离线分析系统等,比如数据库、Elastic Search、Apache Ignite等。
Kafka Connect特性包括:
confluent的CTO Neha Narkhede女士在11月24日宣布 Apache Kafka 发布0.9版本。confluent是由apache kafka的创建者也就是LinkedIn开发Kafka的那个team成立的一家公司。这个版本提供了相当多的Feature和bug fix,具体的改动可以参看 523 JIRA
以下是0.9的主要的改动:
Kafka默认的消息大小为1000012,参数的名称为message.max.bytes.
1 | kafka.server.KafkaConfig: |
但是对于topic来说,这个参数的名称却叫max.message.bytes,和前面的参数的名称很容易弄混。 Kafka应该将这两个参数统一成一个。
因此,如果你想对Boker统一设置的话,你需要在server.properties中设置:
1 | message.max.bytes=1000000 |
如果针对单个的topic设置,你需要:
1 | bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic ABC --config max.message.bytes=1000000 |
另外,你还需要为Consumer设置fetch.message.max.bytes,
为Boker设置replica.fetch.max.bytes (至少和message.max.bytes一样,最大Int.MaxValue)
stackoverflow针对这个问题有个问答:
需要针对Boker和Consumer同时配置:
英文原文: Running Kafka At Scale by Todd Palino, Staff Engineer, Site Reliability.
中文翻译: LinkedIn —— Apache Kafka 的伸缩扩展能力 by 袁不语, 社会主义好, 无若, 开心613, fr000, Shawock.
我在转载时根据原文对译文有所改动。
如果数据是高科技的血脉的话,Apache Kafka 就是 LinkedIn 公司正在使用中的心脏系统。我们使用 Kafka 在多个系统之间传递各类数据,它几乎每一天都和各种服务器打交道。这个架构的复杂性,以及架构实践中采用的各种取舍,衍生出一种快速又可靠地传输的大块数据需求。
本文主要介绍了Kafka High level的代码架构和主要的类。
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。
Apache Kafka与传统消息系统相比,有以下不同:
我们将通过几个case学习Kafka的功能。