kafka如何保证数据是顺序写入的?请教,如果能轻易做到,那为什么别的消息队列不这样做?
京东员工:m
今日头条员工:单个生产者的有序是发送端做的,到服务端某个分区的话,多个生产者发来的数据也可能交错。读的话本身是磁盘索引保障顺序。
程序猿.风流唐伯虎:没听明白[冷汗] 还是不知道怎么保证顺序写。 因为有多个分区,那么写数据的时候,磁头一会到这个分区,一会到那个分区,不也成了随机吗
VIPKID员工:默认其实是不会保证严格按顺序写入的,如果保证严格有序,吞吐量会下降很多,kafka的优势也就没那么明显了,比如有一个参数可以设置,是客户端单个链接能够发送的未响应请求的个数,默认是5,如果retry大于0,当出现某些问题重试的时候,就有可能乱序,要保证严格有序可以设为1
今日头条员工:有序只保证你从某个分区读到的数据顺序与写入顺序一致
程序猿.风流唐伯虎:饶恕我愚钝,那既然这样的话,我写文件一行行的写,读的时候,再一行行的读,就也变成了顺序读写了? 明显不是吧,一个分区的数据出现在多个扇区,肯定顺序读不了
程序猿.我不是王重阳:无非就是FileChannel和mmap
程序猿.我不是王重阳:kafka充分利用了page cache,一般的话,用不到磁盘。。
程序猿.风流唐伯虎:pagecache跟顺序写有啥关系?
程序猿.福康安:轻易实现?kafka只保证单分局内有序,还得保证发送端是有序户串行发送,
程序猿.福康安:理解错了
fittime员工:m
蚂蚁金服员工:m
杭州大搜车汽车服务有限公司员工:m
字节跳动员工:M
程序猿.尼古拉斯赵四:只用一个partition
程序猿.小狮子特尔施特根:kafka单分区有序,发送的时候如果是多个分区没办法保证
程序猿.我不是王重阳:kafka写入的是page cache,也就是写内存,不直接写磁盘,然后由os来写磁盘,这就实现了顺序写。
猿辅导员工:一台机器上不是只有一个分区吗
360企业安全员工:M
阿里员工:Kafka支持单分区有序,想全部有序的话需要自己基于发送端改造,比如基于业务ID的hashcode取余映射到固定对应分区
程序猿.许褚:m
天眼查员工:m
产品汪.打假猴偶斯渣渣辉:一眼看成mmp[笑哭]
安道全:m
网易员工:因为顺序并不是所有场景的严格要求,所以不需要牺牲这么大,保证顺序
程序猿.袁伟:M
程序猿.蓝凤凰:m
北京传智播客教育科技股份有限公司员工:区内有序,全局无序
今日头条员工:单个生产者的有序是发送端做的,到服务端某个分区的话,多个生产者发来的数据也可能交错。读的话本身是磁盘索引保障顺序。