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