kafka

预读:
就是说我在浏览文章的时候当我们浏览到了这一行数字的时候,因为我是从上往下去阅读的,当我阅读到某一行的时候,那这个操作系统会大概率的会认为我要马上阅读下面那条记录,所以为下度这条记录的时候,操作系统会提前把下一行记录帮我读出来,这就是一个预读的功能。

后写:
后写就是我们会往这个操作系统上会有大量的写,如果你是每一次请求你去写一次的话,比如说我们写一千字,你可能对这个数据有一千次的操作对吧,那假如说我们把这一千次操作优化成一次操作,这样就大大提高效率。其实对于你的磁盘来访问,特别是顺序来访问要比你随机的内存访问还要快,所以这里面有一个特点,就是对磁盘的顺序访问,一定要是顺序访问,如果你不是顺序访问的,那你这个预读功能和后写功能就不存在了,他这样的优化就不存在了,这种优化是操作系统级别的,对磁盘的一个顺序访问要比内存还要快,所以由于这么一个特点,它kafka就对这个磁盘数据的一个持久化做了一个优化,就可以做到O(1)的方式进行一个数据处理。

1.将orders数据写成json形式:

# -*- coding: utf-8 -*-
import random
import time
import pandas as pd
import json

writeFileName="flume_exec_test.txt"
cols = ["order_id","user_id","eval_set","order_number","order_dow","hour","day"]
df1 = pd.read_csv('../order_data/orders.csv')
df1.columns = cols
with open(writeFileName,'a+')as wf:
        for idx,row in df.iterrows():
                d = {}
                for col in cols:
                        d[col]=row[col]
                js = json.dumps(d)
                wf.write(js+'\n')
        #       rand_num = random.random()
            #   time.sleep(rand_num)

commit的log可以不断追加。消息在每个分区中都分配了一个叫offset的id序列来唯一识别分区中的消息。

offset
a=[1,2,3,4,5,6]
a[3]=> offset<=>3 4

kafka中一个topic的不同分区只能被消费组中的一个消费者消费。

zero-copy:kafka为了减少字节拷贝,采用了大多数系统都会提供的sendfile系统调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值