Apache卡夫卡——我学习笔记

一个定制的卡夫卡的标志

Apache卡夫卡是一个event-streaming *平台。

(*)事件流:的实践从事件源获取实时数据(如数据库、传感器、移动设备、云服务,和软件应用程序)的形式流的事件。另外,存储这些事件流经久地供以后检索,加上操纵,处理和应对事件流实时和回顾;事件流并将其路由到不同的目的地。

一些更详细的例子事件从手机支付交易,地理位置更新,船运订单,从物联网传感器测量设备或医疗设备,在卡夫卡,等等。这些事件是什么有组织的存储主题。如果我们画一个类比卡夫卡和仅仅是操作系统,一个主题类似于一个文件夹在一个文件系统事件文件在那个文件夹。

从技术的角度来看,卡夫卡是一个分布式系统组成的服务器客户通过通信TCP(已知的高性能网络协议)。它可以部署在裸机硬件、虚拟机、内部容器以及云环境。公共云提供商也完全管理(即供应商负责所有机器保养,补丁和备份管理,可扩展性)卡夫卡设置:喜欢MKS在AWS和汇合的云丰富

当不使用卡夫卡?

之前都是直接复制的Upsolver博客。所以,把你的时间去思考,挑战他们如果他们不适用。例如,关于卡夫卡作为数据库的概念相当有趣

  • 卡夫卡是一个过度当你需要每天处理只有少量的消息(多达几千)。卡夫卡是为了应对高负载。使用传统的消息队列RabbitMQ之类当你没有大量的数据
  • 卡夫卡是一个伟大的解决方案交付消息。但尽管卡夫卡流API,它是不容易on-fly执行数据转换。你需要建立一个复杂的管道的生产者和消费者之间的相互作用,然后维持整个系统。这需要大量的工作和努力。所以,避免使用卡夫卡对ETL作业,特别是在实时处理是必要的。当你需要使用一个简单的任务队列应该使用适当的工具。卡夫卡是不是设计为一个任务队列。还有其他的工具,更适合这样的用例,例如,RabbitMQ。
  • 如果你需要一个数据库,使用一个数据库,而不是卡夫卡。卡夫卡是不利于长期存储。它支持在指定的保存期保存数据,但是一般来说,它应该不会很长。卡夫卡还存储冗余数据的副本,可以增加存储成本。数据库优化的存储新的数据。他们还多才多艺的查询语言,支持高效的数据插入和检索。如果关系数据库不需要你用例,试图看看非关系(例如,MongoDB),但不要使用卡夫卡。

架构和关键概念

本节仅解释信息的本地卡夫卡文档

主题、分区段

主题容器和经理的事件。他们类似于在关系数据库中。

命名的事情:虽然没有公约关于主题名称,这一点帖子是值得一看。要考虑的一件事是,卡夫卡不区分_符号,使用可能会变得混乱。这是一个最佳实践,选择一个和坚持下去。

- - - - - -

警告:尽管从技术上讲,这是法律的目标一个不存在的话题事件,作为一个经验法则,预先创建的主题。枪击事件主题不只是与谦卑的警告,但使用默认设置创建一个主题(即复制的因素:1、分区:1)这绝对不是一个理想的方式。此外,即时我们创建和发送一个事件,概率是该分区的领导人还没有选定,所有这些可能会导致意外的行为,容易使头痛。

主题包括子结构分区。他们就像他们的名字暗示的分布式系统主题:它使数据(事件)分布在多个代理(在卡夫卡隆戈,经纪人可以被认为是卡夫卡集群的节点)。这些分区通常枚举索引号,比如0,1,2,…,n。

在每一个分区,记录(或消息,不管你叫它)被确定为他们的数值抵消年代。补偿不是主题级,而是分区级,这意味着:获取记录在一个话题,我们所需要的这两个分区名称抵消特定的记录。

分区的数量确定一个主题,主题是(创建的——分区国旗)。而递增分区计数允许创建之后,我们不能减少分区号(看到这个设计问题的推理可能的数据丢失在这里)。

Event-partition映射:当一个新的事件发布到主题,它实际上是附加到这个话题的一个分区。事件与事件键(例如,一个客户或车辆ID)写入相同的分区,和卡夫卡担保,任何给定topic-partition消费国总是读到分区的事件以完全相同的顺序写。(复制https://kafka.apache.org/intro intro_concepts_and_terms)。这个分区级秩序保证,我们可以告诉后创建一个记录与抵消7绝对抵消6。然而,十字格抵消比较计算订单不会工作一定是卡夫卡不得跨分区均匀地分布记录。它实际上是相当随机(循环只要没有指定分区号由生产商在大多数用例)。

每个分区的年代。一段是磁盘上的一个文件。段之间记录数据一个偏移量范围和它们的大小是由卡夫卡配置segment.bytes。最新的和可写环节叫做活跃的市场自然,ata给定的时间,一个分区一个且仅此一个活跃的部分。

卡夫卡的事件主题并非永远存在:我们可以指定集群级别或主题级保留政策,基于基于时间或大小。因为它通常是更可预测,基于时间的保留数据(例如TTL)更常见的是7天,默认情况下。当然,记录拆迁后保留不影响今后的偏移值,他们继续增加在最近的值(即没有“抵消0已经变成空的,让我们将它设置为下一个事件”;否则它将不再保证指出西安市)。

主题不能改变:记录他们不可变的

服务器级:集群、经纪人

  • 卡夫卡被称为节点代理年代。每个代理都有一个ID,它是一个整数。然而,他们不需要连续的或从地面开始,像0,1,2…:我们可以任意指定一个代理的ID,比方说,105年什么的。每个代理都有一些分区和分区的副本;然而,并不是所有的都能:一个经典的分布式数据系统。
  • 所有的经纪人在同一组构成了卡夫卡集群
  • 我们可以连接到任何代理集群中(它被称为bootstrap-server)和获取集群元数据关于其他经纪人、主题和分区。(请注意:虽然我们可以通用元数据从任何代理、指定的记录写/读,单领袖代理他们的分区)。能够任意代理经纪人通过连接列表让任何代理回复代理发现请求,但这是范围。
  • 首先,一群三个经纪人通常会理想的
  • 根据Apache管理员,卡夫卡用于代理和分区管理,卡夫卡经纪人的数量需要奇数(由于领导人选举策略管理员使用)。然而,随着最近的版本3。x卡夫卡不再需要管理员。我不确定如果我们仍然不得不使用奇数,但是的;idk。

为了全面代理配置清单:https://kafka.apache.org/documentation/ brokerconfigs

分区和复制

  • 在卡夫卡的分区主题通常是没有保持在同一个代理,而是在集群上分发给其他经纪人。
  • 维持数据的可靠性在分布式系统中,复制的东西和复制。否则,失败的一个代理可能会最终熊分区数据的不可逆损失。所以,完成它,我们可以使用——复制因子国旗在创建一个主题(一个典型的生产环境3)。通过复制、分区复制/复制其他经纪人也和容错。
  • 在给定的时间,每个分区只有一个分区领袖代理(但每个分区可能会有不同的经纪人作为他们的领导者,我的意思每个代理都可以领袖的分区)一个分区只能读/写通过这个代理领袖,和其他人(称为“同步副本(ISR)”)只同步。
  • 代理领袖选举一个分区内部管理卡夫卡(以前的附加饲养员集群需要)。如果代理失败需要一位新的领导人的分区的领袖。所以,在这种情况下,一个isr成为分区。如果前任领导复苏和充当领袖曾经,卡夫卡冲突负责。然而,它超出了我们的范围。

卡夫卡什么担保

卡夫卡保证一些事情,可能像永远爱米。嗯,无论如何,软件一个希望不会打破自己的诺言:

  • 记录发送到一个话题是命令相同的分区——不,不是十字格或整个主题。
  • 在阅读一个分区一个消费者的订单最近从最古老的记录(如FIFO队列的顺序,不同之处在于消息不是丢弃后读;只有消费者团体的抵消措施)。
  • 以N为主题的复制因子,卡夫卡N - 1经纪人的容忍失败。例如,对于典型的复制因子3如上所述,失去3 - 1 = 2经纪人在任何时候是可以忍受的。
  • 除非增加分区号,相同的记录,非空键是保证路由到相同的分区。

一些先进的笔记主题&分区配置

估计分区的数量在创建一个主题

正如我们已经提到的,我们不能减少主题后创建的分区号。虽然可以增加他们,总是想要开始与一个合理的价值:改变他们经常被认为是吗不好的做法。快速粗略的估计可能是如下:

  • 小型集群(例如< 6经纪人)→分区=(#的经纪人)x 2
  • 为中型集betway娱乐官网群(即6 - 12经纪人)→分区= 12
  • 大型集群(例如> 12经纪人)→分区=(#的经纪人)

然而,一个更好的结果可以被添加的参数解决像平行的消费者依靠throughput-peak的次数,在两年内可能生产吞吐量等。

更多关于主题配置

整个主题配置清单:https://kafka.apache.org/documentation/ topicconfigs

  • 滚一个(实际文件占分区),或者换句话说承诺和关闭一个新的开始,有两个配置(我们将讨论这些细节的重要性,用日志压实):
    - - - - - -log.segment.bytes:马克斯段大小(以字节为单位)。默认值:1073741824 (1 gibibyte)
    - - - - - -segment.ms卡夫卡:时间之后,将迫使日志卷即使段文件不完整,以确保保留可以删除或紧凑的旧数据。默认值:604800000(7天)
  • 在前一节中讨论,后记录(或记录),保留政策日志清理发生。这里有一些重要的行为:
    - - - - - -log.cleanup.policy:默认值(即用户创建的主题。用户的主题)是删除;这意味着仅仅是删除记录log.retention.hours传球。默认值为指定的主题用于跟踪实际偏移值(命名__consumer_offsets):默认紧凑的紧凑的使日志压实,这实际上使过去的日志为每个消息键和删除前面的一个分区(类似于数据库情况下是足够的,而不是一个完整的历史快照)。这个任务之后,消息仍然可以为指定的时间消耗delete.retention.ms。的

卡夫卡记录键值对的方式,但关键是可选的。它是有效的,只要生产商只创建一个记录值。然而,有一些钥匙效果和用例。为用户话题,日志压实,也只能使如果生产记录与钥匙。

- - -

- - -

得到了媒介的应用betway娱乐官网

一个按钮“App Store下载”说,如果点击它会使你的iOS应用程序商店
说一个按钮上,谷歌玩,如果点击它会使你的谷歌商店
Baidu