본관은 광산(光山). 자는 자중(子重). 아버지는 목사 김효성(金孝誠)이다. 손자 김홍석(金弘錫)이 박세당(朴世堂)의 사위다.
서인계의 인물로서 1650년(효종 1) 사마시에 합격하고, 이듬해부터 효릉참봉·의금부도사·빙고별검(氷庫別檢) 등을 지냈다.
1657년 식년 문과에 병과로 급제, 승문원부정자·승문원박사·성균관전적·병조좌랑을 거쳐 영덕현령으로 나갔다. 임지에서 쓸데없는 비용을 절약하여 백성들의 잡세를 격감시키고, 학문을 진작하며 빈민을 구제하는 데 힘썼다.
왕족이었던 복선군(福善君) 이남(李枏: 인평대군의 아들) 형제가 세력을 믿고 남의 노비 수백 명을 약탈하여 물의를 빚었으나 여러 해 송사가 해결되지 못하였는데, 그 일을 맡아 처결하여 불법으로 빼앗은 노비들을 모두 원주인에게 돌려보냈다.
이 일로 그들에게 노여움을 사 현령직에서 파면되었다. 그 뒤 병조좌랑·병조정랑·정언·지평 및 시강원사서·문학을 거쳐 장성부사로 나가 선정을 베풀었다. 이듬해 직강·사예·종부시정(宗簿寺正)을 역임하고 숙종 초 남인정권하에서는 남양현감·가산군수·장흥현감 등 말단외직으로 전전하였다.
1680년(숙종 6) 경신환국으로 서인이 득세하자 장령으로 발탁되었으나, 남인들의 처벌에 온건한 입장을 표방했다가 체직되었다. 광주목사로 나갔다가 다시 장령이 되어 호포법(戶布法)의 실시에 반대하여 물러났고, 온성부사·무주부사·김해부사·헌납·집의·우부승지를 끝으로 관직생활을 마쳤다.
성품이 매우 강직하여 권세에 동요되지 않았고 이익과 명예를 탐하지 않았으며, 일을 논함에는 강개하였으나 처분은 온건하였고 지방관으로서 선정을 베풀었다.