楼主: 836195369
跳转到指定楼层
上一主题 下一主题
收起左侧

[经验总结] 系统设计|Kafka相关!

   
🔗
invisibili 2021-5-20 14:09:23 | 只看该作者
全局:
ymsfd007 发表于 2021-5-20 10:30
非常感谢。

有几个问题:

第2点,我理解这是kafka的design choice,这样可以简化很多处理
比如多个consumer compete一个partition要怎么处理避免重复
如果consumer错误,消息怎么重试
回复

使用道具 举报

🔗
ymsfd007 2021-5-20 14:48:50 | 只看该作者
全局:
tiancaihb 发表于 2021-5-20 12:51
1. hot shard,因为本来partition之间是独立的,如果平均分message,就是embarrassingly parallel。另外p ...

谢谢!

不知道kafka的业界应用趋势如何,有什么痛点吗?
我们内部碰到异步系统基本都是来一套lambda architecture,我们都是内部套装,像stream process/message broker我们是自己写的轮子,batch process就上一套MapReduce/Hadoop+GFS/HDFS。这样好处是stream process基本是stateless,sharding后可以horizontal scale。 batch process也可以轻易处理几乎任意规模的数据。缺点就是极其笨重,组件多,维护成本高。我看kafka把stream和batch process集成到一套系统了,我的理解是kafka是一套stateful的分布式存储+消息系统,几乎可以作为所有异步系统(indexing,analytics,log, monitoring)单一数据库/source of truth来使用了是吗?
回复

使用道具 举报

🔗
tiancaihb 2021-5-20 17:30:10 | 只看该作者
全局:
ymsfd007 发表于 2021-5-20 14:48
谢谢!

不知道kafka的业界应用趋势如何,有什么痛点吗?

不知道整个业界的情况,感觉为了让这么一个很底层的系统高可用,需要有一些运营的经验和工具。
kafka本身没有processing的功能,要靠其他建立在它上面的系统吧。可能不太擅长batch processing?它本身只是一个相对单一的组件。
另外你说的那些应用,恐怕还要靠对应专门的系统。kafka只是作为一个消息管道。一般好像也不会把kafka作为长期的存储,至少我知道retention大了之后operations会麻烦。
不过kafka是可以看作数据库的change log。好像有个用法叫ktable。

评分

参与人数 2大米 +2 收起 理由
836195369 + 1 给你点个赞!
rxTByjroA2h3 + 1 immutable db

查看全部评分

回复

使用道具 举报

🔗
brtt13 2021-5-20 21:32:01 来自APP | 只看该作者
全局:
给你赞一个,地里应该多点这样的文章
回复

使用道具 举报

🔗
PorkSoda 2021-5-20 21:53:07 | 只看该作者
全局:
第二点第三点是不是可以这样理解:consumer - partition的关系是一对多,而partition - consumer的关系是一对一
回复

使用道具 举报

🔗
lovelove 2021-5-20 22:18:01 | 只看该作者
全局:
labour31 发表于 2021-5-20 10:54
非常期待!很想了解kafka delivery guarantee方面的内容

卡夫卡的每个消息有几个拷贝,如果所有的拷贝都复制了,就是最安全的(我忘了卡夫卡的专用名词了,好像是ACK),但是也是最慢的。如果写入一个拷贝就返回,那就是最快的,但是有一定可能丢失。具体细节记不清了,但是基本原理就是这样。实际执行中还有很多nuance,比如你发了一堆消息,结果最早的那个返回失败了,你怎么保证消息的顺序性,等等。
回复

使用道具 举报

🔗
 楼主| 836195369 2021-5-20 22:20:10 | 只看该作者
全局:
tiancaihb 发表于 2021-5-20 12:51
1. hot shard,因为本来partition之间是独立的,如果平均分message,就是embarrassingly parallel。另外p ...

nb!请大家给这位大佬加米!另外我再补充一些我了解到的内容
1. 集群中有一个环节是partition的备份,一个partition会被复制成你设置的参数个 并同步给每一个分布的broker。这个环节如果我没有记错的话,走的路线跟consumer消费任务是差不多的(我忘记在哪个论坛或者教程里看到的了,具体忘记了,如果有大佬发现这个有问题请通知我)。所以代价就是集群太多了的时候,加一个减一个broker或者加一个减一个topic,都需要很大的网络花销去做备份。另外老版本kafka中 zookeeper也会成为瓶颈,但是现在应该不会了。据我所知,现在的版本中zk已经不管kafka内部逻辑了,只管配置(新版本即将删除zk依赖)。
2. 首先它就是这么设计的,为的就是防止一个消息被多个consumer处理。
3. latency不是主要的,最主要是要吞吐量大,另外我个人认为latency并不算kafka优势,因为生产者可以定期批量生产消息。这里涉及到一个参数,叫log.flush.interval,可以设置多久将数据刷新到磁盘或者每多少条消息刷新到磁盘。注意,只有消息被刷新到磁盘了,才能被broker发送出去。
4. 这位层主说的对。kafka很多东西是需要用户自己去实现逻辑的,不像那些mq有一堆开箱即用的功能。
回复

使用道具 举报

🔗
挖煤 2021-5-20 23:15:53 | 只看该作者
全局:
面试会问这种吗 怕怕
回复

使用道具 举报

🔗
tomonichixixi 2021-5-21 00:02:38 | 只看该作者
全局:
谢谢分享,跟一个后续贴zszs
回复

使用道具 举报

🔗
helloteacha 2021-5-21 00:42:47 | 只看该作者
全局:
对比过消息中间件和卡夫卡,总结他们的区别大致如下:

属性                        消息中间件                                     卡夫卡
------------------------------------------------------------------------------------------------------------------------------
信息保留            消费完即消失                                  可以保留一定时间并重复消费(因为数据存硬盘)
信息存储方式        内存(可选硬盘备份)                              日志存硬盘
信息读取                 通常是推送给消费者                        消费者来拉取         
信息顺序                 单一消费者保证顺序                              单一分区保证顺序(需要配置生产者来保证)
信息次数                 至多一次/至少一次                             至多一次/至少一次/不多不少一次(opinionated)
消费者                     所有消费者共同读取信息                     每个消费者组分别读取信息(消费者组是kafka特有的概念)

推荐极客时间的卡夫卡课程。内容和讲解都非常的棒。讲解者是卡夫卡的专家委员会的成员.
Kafka核心技术与实战(https://time.geekbang.org/column/intro/191)
Kafka核心源码解读(https://time.geekbang.org/column/intro/304)
讲解者开了博客和微信公众号,时不时的写一些技术文章。

评分

参与人数 1大米 +1 收起 理由
836195369 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表