保康| 勐海| 舞阳| 什邡| 吉安市| 柳河| 镇远| 武昌| manbetx体育 br88冠亚 沧州| br88冠亚 丹巴| 开平| 兰考| dafabet娱乐场官网 津南| 呼玛| 新余| bwin网站 潜山| 环江| dafabet 长顺| 大发dafa888 bwin888 衡东| betway必威体育 饶河| 武进| 横峰| 沐川| 新万博官网 fun88手机版 托里| 洛隆| 白云矿| 九州娱乐官方网站 遂溪| 平果| 寻乌| 天水| 淳安| 曲周| br88冠亚 富锦| 拜城| 韦德1946 wanbetx万博体育 南沙岛| 永仁| 陇南| 台东| 大竹| 浩博首页 大同市| uedbet新网址 无为| 衡东| bwin必赢 永胜| app.1manbetx.com 亚洲城客户端下载官网 庐山| 南海镇| 赣县| 郁南| 万博app苹果版下载 城固| 宜章| 大奖彩票 BR88 广州| 嘉义县| 涡阳| betway必威 凤台| 鄂州| 小金| www.3344666.com ca881亚洲城娱乐 乳源| 巴马| 大同区| 五华| 乐天堂 BR88 内江| 石渠| 青田| 明水| 陕西| 金阳| 井陉| 兴安| 塔河| 乌伊岭| 胶州| 冠亚彩票 彭山| 光山| 漾濞| 铁岭市| 高要| 新都| 渭南| 昌吉| dafa888bet 辽阳市| br88冠亚 普格| manbetx登录 博罗| 安图| 商都| 万博manbetx 天安门| 金溪| 大足| manbetx客户端 张湾镇| 滨海| br88 库伦旗| 淮北| 天峻| 金溪| manbetx客户端 dafa888t娱乐场经典版 天柱| 狗万客户端 黄埔| 南澳| 加格达奇| 翁源| 大奖888 献县| 招远| 平江| dafabet真钱娱乐手机版 曾母暗沙| 威廉希尔 嘉兴| manbetx 开县| br88冠亚 临漳| 娄烦| 新宾| 铁力| fun88 六枝| 北川| 灯塔| 万博体育彩票 彭水| 斗门| 万博2.0下载地址 芒康| 东至| 保靖| 金湖| 汨罗| 绍兴市| manbetx登录 大发casino下载 河津| 岐山| 韦德1946 江城| 昌乐| BR88 德化| 苍梧| wanbet万博 青海| fun.88 全椒| 永丰| 丰南| 浏阳| 正宁| 兴平| BR88官网 蕲春| 手机博彩用什么浏览器 寰宇浏览器9.0官方下载 manbet手机版 济阳| 祁阳| 格尔木| 内黄| 绥棱| manbetx苹果客户端2.0 万州| 双城| BR88 顺昌| 远安| 万博app进不去 华容| 优德w88娱乐 大发客户端下载 dafa888.casino 四方台| 博鳌| 甘孜| opebet 冠亚彩票 永和| 滕州| 岫岩| 长春| 广宁| dafabet属于什么游戏 双流| FUN乐天使 陆河| dafabet888.org dafa888bet 陇西| 西丰| ca888 ca88 海丰| betway 朝阳县| 格尔木| 嘉峪关| 五峰| 宜城| ca888 边坝| 88bifa.com 宜春| 抚宁| 江孜| 改则| 霍林郭勒| 保靖| 冠亚娱乐城 亚洲城 bwin首页 fun88 3344444 dafabet娱乐经典版 景东| manbetx登陆 德阳| 内丘| 上杭| 林芝县| 南安| 滁州| 88bifa.com 黔江| 吉隆| 明溪| 旺苍| 大渡口| 亚洲城ca88 夷陵| 亚洲城手机客户端下载 冠亚娱乐 利川| betway必威 安岳| 侯马| 东安| 桂东| 岐山| 召陵| br88冠亚 杞县| 韦德1946 韦德1946 建水| 岳池| 科尔沁左翼中旗| 基隆| 3344555 南川| BR88 镇雄| 冠亚br88 优德88中文 ca888亚洲城唯一官方 dafa888bet 永寿| 台湾| bwin必赢 manbetx dafabet娱乐场官网 冠亚娱乐 覃塘| 清原| 万博app2.0 新田| 大发手游上分 彭州|

原创话剧《种子天堂》:“种子精神”震撼人心

2019-01-20 15:42 来源:大河网

  原创话剧《种子天堂》:“种子精神”震撼人心

  乐天堂fun88(张文)不断提升群众的幸福感和获得感,打造美丽乡村,书写乡村振兴齐鲁样板“敬仲篇章”。

”意思是说,教育是埋下一颗种子,切忌流于形式、走马观花。上述麦田房产分析师指出,在双方议价中降价房源比例达到95%。

  福建目前已实现县县通高速,镇镇通干线。此次桂林电子科技大学被媒体曝光的规定,有关部门的处理,有可能也只是取消或者不执行,校方可能连给师生的致歉也没有。

  所以稷下学宫的诸子百家他们争鸣的一个很重要的问题,就是如何统一天下,譬如说孟子就提出来仁政统一天下,提出“保民而王,莫之能驭”,就是说只要对老百姓好、人心所向,那么天下的统一必然是由你来统一。11月16日,记者来到展览现场看到,展览通过历史图片、文字视频、实物展品等,让人们重温了改革开放40年来人民群众生产生活发生的伟大变迁。

  虽然百度Apollo颇有盛名,但一枝独秀的背后,却凸显了中国车企整体在自动驾驶领域技术储备的薄弱。

    新华网南昌11月14日电(王凯丰)橙香丰收季,客乡迎宾时。

  首批122名专家、教授于2018年1月到位。受访者认为企业招聘人才应该看重专业能力(%)、与企业发展的匹配度(%)、进取精神和学习能力(%)。

    地质公园评审专家认为,永泰百漈沟地质遗迹类型较为丰富。

    一是满足了农民贷款需求。江西居民只需在支付宝里搜索“赣服通”,授权政府机构进行实名认证后,就能“一次不用跑”,在家享受110项政务服务。

  严查党员干部、公职人员充当黑恶势力“保护伞”问题,政法机关、相关职能部门及其工作人员在扫黑除恶专项行动中态度消极,不作为、慢作为、乱作为,工作玩忽职守、失职失责,因形式主义、官僚主义造成严重后果和不良影响等问题。

  冠亚br88早在2016年,国家邮政局就规定了实行邮件快件实名制,但从这几年实施的实际情况来看,邮件快件实名制执行并不理想。

  (冰启)+1  据介绍,江西银行是江西省内首家向港交所递交上市申请材料的银行。

  betway必威 w88.com 万博manbetx

  原创话剧《种子天堂》:“种子精神”震撼人心

 
责编:
炼数成金 门户 大数据 分布式系统 查看内容

原创话剧《种子天堂》:“种子精神”震撼人心

manbetx代理 南昌市VR企业组织新录用并签订一年以上劳动合同的本科以上毕业生,参加虚拟现实岗前专业技能培训且取得认定证书的,按每人4500元给予企业培训费用补助。

2018-9-3 14:40| 发布者: 炼数成金_小数| 查看: 15881| 评论: 0|来自: 聊聊架构

摘要: 如果你使用了像 Kafka 这样的流式处理平台,就要搞清楚一件事情:你需要用到哪些主题?特别是如果你要将一堆不同的事件作为消息发布到 Kafka,是将它们放在同一个主题中,还是将它们拆分到不同的主题中?Kafka 主题 ...

管理 数据库 存储 Hadoop Kafka 模式

如果你使用了像 Kafka 这样的流式处理平台,就要搞清楚一件事情:你需要用到哪些主题?特别是如果你要将一堆不同的事件作为消息发布到 Kafka,是将它们放在同一个主题中,还是将它们拆分到不同的主题中?

Kafka 主题最重要的一个功能是可以让消费者指定它们想要消费的消息子集。在极端情况下,将所有数据放在同一个主题中可能不是一个好主意,因为这样消费者就无法选择它们感兴趣的事件——它们需要消费所有的消息。另一种极端情况,拥有数百万个不同的主题也不是一个好主意,因为 Kafka 的每个主题都是有成本的,拥有大量主题会损害性能。

实际上,从性能的角度来看,分区数量才是关键因素。在 Kafka 中,每个主题至少对应一个分区,如果你有 n 个主题,至少会有 n 个分区。不久之前,Jun Rao 写了一篇 博文,解释了拥有多个分区的成本(端到端延迟、文件描述符、内存开销、发生故障后的恢复时间)。根据经验,如果你关心延迟,那么每个节点分配几百个分区就可以了。如果每个节点的分区数量超过成千上万个,就会造成较大的延迟。

关于性能的讨论为设计主题结构提供了一些指导:如果你发现自己有数千个主题,那么将一些细粒度、低吞吐量的主题合并到粗粒度主题中可能是个明智之举,这样可以避免分区数量蔓延。
然而,性能并不是我们关心的问题。在我看来,更重要的是主题结构的数据完整性和数据模型。我们将在本文的其余部分讨论这些内容。

主题等于相同类型事件的集合?
人们普遍认为应该将相同类型的事件放在同一主题中,不同的事件类型应该使用不同的主题。这种思路让我们联想到关系型数据库,其中表是相同类型记录的集合,于是我们就有了数据库表和 Kafka 主题之间的类比。

Confluent Avro Schema Registry 进一步强化了这种概念,因为它鼓励你对主题的所有消息使用相同的 Avro 模式(schema)。模式可以在保持兼容性的同时进行演化(例如通过添加可选字段),但所有消息都必须符合某种记录类型。稍后我会再回过头来讨论这个问题。

对于某些类型的流式数据,例如活动事件,要求同一主题中所有消息都符合相同的模式,这是合理的。但是,有些人把 Kafka 当成了数据库来用,例如 事件溯源,或者 在微服务之间交换数据。对于这种情况,我认为是否将主题定义为具有相同模式的消息集合就不那么重要了。这个时候,更重要的是主题分区中的消息必须是有序的。

想象一下这样的场景:你有一个实体(比如客户),这个实体可能会发生许多不同的事情,比如创建客户、客户更改地址、客户向帐户中添加新的信用卡、客户发起客服请求,客户支付账单、客户关闭帐户。

这些事件之间的顺序很重要。例如,我们希望其他事件必须在创建客户之后才能发生,并且在客户关闭帐户之后不能再发生其他事件。在使用 Kafka 时,你可以将它们全部放在同一个主题分区中来保持它们的顺序。在这个示例中,你可以使用客户 ID 作为分区的键,然后将所有事件放在同一个主题中。它们必须位于同一主题中,因为不同的主题对应不同的分区,而 Kafka 是不保证分区之间的顺序的。

顺序问题
如果你为 customerCreated、customerAddressChanged 和 customerInvoicePaid 事件使用了不同的主题,那么这些主题的消费者可能就看不到这些事件之间的顺序。例如,消费者可能会看到一个不存在的客户做出的地址变更(这个客户尚未创建,因为相应的 customerCreated 事件可能发生了延迟)。
如果消费者暂停一段时间(比如进行维护或部署新版本),那么事件出现乱序的可能性就更高了。在消费者停止期间,事件继续发布,并且这些事件被存储在特定定的主题分区中。当消费者再次启动时,它会消费所有积压在分区中的事件。如果消费者只消费一个分区,那就没问题:积压的事件会按照它们存储的顺序依次被处理。但是,如果消费者同时消费几个主题,就会按任意顺序读取主题中数据。它可以先读取积压在一个主题上的所有数据,然后再读取另一个主题上积压的数据,或者交错地读取多个主题的数据。

因此,如果你将 customerCreated、customerAddressChanged 和 customerInvoicePaid 事件放在三个单独的主题中,那么消费者可能会在看到 customerCreated 事件之前先看到 customerAddressChanged 事件。因此,消费者很可能会看到一个客户的 customerAddressChanged 事件,但这个客户却未被创建。

你可能会想到为每条消息附加时间戳,并用它来对事件进行排序。如果你将事件导入数据仓库,再对事件进行排序,或许是没有问题的。但在流数据中只使用时间戳是不够的:在你收到一个具有特定时间戳的事件时,你不知道是否需要等待具有较早时间戳的事件,或者所有之前的事件是否已经在当前事情之前到达。依靠时钟进行同步通常会导致噩梦,有关时钟问题的更多详细信息,请参阅“Designing Data-Intensive Applications”的第 8 章。

何时拆分主题,何时合并主题?
基于这个背景,我将给出一些经验之谈,帮你确定哪些数据应该放在同一主题中,以及哪些数据应该放在不同的主题中。

首先,需要保持固定顺序的事件必须放在同一主题中(并且需要使用相同的分区键)。如果事件属于同一实体,那么事件的顺序就很重要。因此,我们可以说,同一实体的所有事件都应该保存在同一主题中。

如果你使用事件溯源进行数据建模,事件的排序尤为重要。聚合对象的状态是通过以特定的顺序重放事件日志而得出的。因此,即使可能存在不同的事件类型,聚合所需要的所有事件也必须在同一主题中。

对于不同实体的事件,它们应该保存在相同的主题中还是不同的主题中?我想说,如果一个实体依赖于另一个实体(例如一个地址属于一个客户),或者经常需要同时用到它们,那么它们也应该保存在同一主题中。另一方面,如果它们不相关,并且属于不同的团队,那么较好将它们放在不同的主题中。

另外,这也取决于事件的吞吐量:如果一个实体类型的事件吞吐量比其他实体要高很多,那么较好将它分成几个主题,以免让只想消费低吞吐量实体的消费者不堪重负(参见第 4 点)。不过,可以将多个具有低吞吐量的实体合并起来。

如果一个事件涉及多个实体该怎么办?例如,订单涉及到产品和客户,转账至少涉及到两个账户。

我建议在一开始将这些事件记录为单个原子消息,而不是将其分成几个属于不同主题的消息。在记录事件时,较好可以保持原封不动,即尽可能保持数据的原始形式。你可以随后使用流式处理器来拆分复合事件,但如果过早进行拆分,想要重建原始事件会难得多。如果能够为初始事件分配一个 ID(例如 UUID)就更好了,之后如果你要拆分原始事件,可以带上这个 ID,从而可以追溯到每个事件的起源。

看看消费者需要订阅的主题数量。如果几个消费者都订阅了一组特定的主题,这表明可能需要将这些主题合并在一起。

如果将细粒度的主题合并成粗粒度的主题,一些消费者可能会收到他们不需要的事件,需要将其忽略。这不是什么大问题:消费消息的成本非常低,即使最终忽略了一大半的事件,总的成本可能也不会很大。只有当消费者需要忽略绝大多数消息(例如 99.9%是不需要的)时,我才建议将大容量事件流拆分成小容量事件流。

用作 Kafka Streams 状态存储(KTable)的变更日志主题应该与其他主题分开。在这种情况下,这些主题由 Kafka Streams 流程来管理,所以不应该包含其他类型的事件。

最后,如果基于上述的规则依然无法做出正确的判断,该怎么办?那么就按照类型对事件进行分组,把相同类型的事件放在同一个主题中。不过,我认为这条规则是最不重要的。

模式管理
如果你的数据是普通文本(如 JSON),而且没有使用静态的模式,那么就可以轻松地将不同类型的事件放在同一个主题中。但是,如果你使用了模式编码(如 Avro),那么在单个主题中保存多种类型的事件则需要考虑更多的事情。

如上所述,基于 Avro 的 Kafka Confluent Schema Registry 假设了一个前提,即每个主题都有一个模式(更确切地说,一个模式用于消息的键,一个模式用于消息的值)。你可以注册新版本的模式,注册表会检查模式是否向前和向后兼容。这样设计的一个好处是,你可以让不同的生产者和消费者同时使用不同版本的模式,并且仍然保持彼此的兼容性。

Confluent 的 Avro 序列化器通过 subject 名称在注册表中注册模式。默认情况下,消息键的 subject 为-key,消息值的 subject 为-value。模式注册表会检查在特定 subject 下注册的所有模式的相互兼容性。

最近,我为 Avro 序列化器提供了一个补丁,让兼容性检查变得更加灵活。这个补丁添加了两个新的配置选项:key.subject.name.strategy(用于定义如何构造消息键的 subject 名称)和 value.subject.name.strategy(用于定义如何构造消息值的 subject 名称)。它们的值可以是如下几个:
io.confluent.kafka.serializers.subject.TopicNameStrategy(默认):消息键的 subject 名称为-key,消息值为-value。这意味着主题中所有消息的模式必须相互兼容。

io.confluent.kafka.serializers.subject.RecordNameStrategy:subject 名称是 Avro 记录类型的完全限定名。因此,模式注册表会检查特定记录类型的兼容性,而不管是哪个主题。这个设置允许同一主题包含不同类型的事件。

io.confluent.kafka.serializers.subject.TopicRecordNameStrategy:subject 名称是-,其中是 Kafka 主题名,是 Avro 记录类型的完全限定名。这个设置允许同一主题包含不同类型的事件,并进一步对当前主题进行兼容性检查。

有了这个新特性,你就可以轻松地将属于特定实体的所有不同类型的事件放在同一个主题中。现在,你可以自由选择主题的粒度,而不仅限于一个类型对应一个主题。

声明:文章收集于网络,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2019-01-20 16:30 , Processed in 0.158658 second(s), 24 queries .